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 中导致了同样的错误,但它被捕获了。
所以,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 中导致了同样的错误,但它被捕获了。