所以,System.Windows.Media.Brushes是可冻结的。这意味着如果在笔刷上调用.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>我试过了,当我改变窗口的前景时,矩形的颜色就会更新。这是否意味着,即使画笔处于冻结状态,也可以修改它的颜色属性?或者颜色被冻结为绑定?这对冻结对象的性能收益有何影响?
发布于 2018-07-25 03:28:57
绑定优先。
我尝试直接从后面的代码修改画笔的颜色,它允许我这样做(这样它就不会被冻结)。
然后我试着从后面的代码冻结笔刷,它抛出了一个错误,说"This freezable the be frozen“。我的猜测是,绑定在XAML中导致了同样的错误,但它正在被捕获。
https://stackoverflow.com/questions/51506224
复制相似问题