Freezable或Binding在WPF中优先吗?

时间:2018-07-24 19:28:57

标签: xaml binding freezable

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

在WPF中,可以使用绑定来在其他属性发生更改时更新属性。

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

<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>

我尝试了一下,当我更改窗口的前景时,矩形的颜色会更新。这是否意味着即使笔刷被冻结,也可以修改它的颜色属性?还是将颜色冻结为一种结合物?这如何影响冻结对象的性能?

1 个答案:

答案 0 :(得分:0)

绑定优先。

我尝试直接从后面的代码中修改画笔的颜色,这使我能够这样做(因此它没有冻结。)

然后,我尝试从后面的代码中冻结Brush,这引发了一个错误,指出“此可冻结对象无法冻结”。我的猜测是,绑定在XAML中引起了相同的错误,但被捕获了。