WPF 中 Freezable 或 Binding 优先吗?

Does Freezable or Binding take precedence in WPF?

所以,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>

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

绑定优先。

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

然后我尝试从后面的代码中冻结 Brush,它抛出了一个错误 "This freezable cannot be frozen." 我的猜测是绑定在 XAML 中导致了同样的错误,但它被捕获了。