1

因此,System.Windows.Media.Brushes 是可冻结的。这意味着如果您在 Brush 上调用 .Freeze() ,它将变得不可修改。这提高了性能。

在 WPF 中,您可以使用绑定作为在其他属性更改时更新属性的一种方式。

那么,当我创建 Frozen 画笔但绑定颜色时会发生什么?冻结优先还是绑定优先?

<Window x:Class="WpfApplication4.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
    Title="MainWindow" Height="350" Width="525" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    Foreground="Green">
<Window.Resources>
    <SolidColorBrush x:Key="foregroundCopy" Color="{Binding Foreground}" po:Freeze="True"/>
</Window.Resources>

    <Rectangle Fill="{StaticResource foregroundCopy}"/>

</Window>

我试过了,当我改变窗口的前景时,矩形的颜色会更新。这是否意味着您可以修改画笔的颜色属性,尽管它被冻结了?还是颜色被冻结为绑定?这如何影响冻结对象的性能增益?

4

1 回答 1

1

绑定优先。

我尝试直接从后面的代码修改画笔的颜色,它允许我这样做(所以它没有被冻结。)

然后我尝试从后面的代码中冻结 Brush,它抛出了一个错误,说“这个可冻结不能被冻结”。我的猜测是绑定在 XAML 中导致了同样的错误,但它被捕获了。

于 2018-07-24T19:28:56.793 回答