Wpf 如何冻结路径数据
我们的WPF应用程序中有许多复杂的Wpf 如何冻结路径数据,wpf,xaml,freezable,Wpf,Xaml,Freezable,我们的WPF应用程序中有许多复杂的路径。例如: <Path Data="M14.077,9.772C11.634,9.772 9.652,11.753 9.652,14.197 9.652,16.641 11.634,18.622 14.077,18.622 16.521,18.622 18.502,16.641 18.502,14.197 18.502,11.753 16.521,9.772 14.077,9.772 M28,12L28,16 24.085,16C23.84,17.369
路径。例如:
<Path Data="M14.077,9.772C11.634,9.772 9.652,11.753 9.652,14.197 9.652,16.641 11.634,18.622 14.077,18.622 16.521,18.622 18.502,16.641 18.502,14.197 18.502,11.753 16.521,9.772 14.077,9.772 M28,12L28,16 24.085,16C23.84,17.369,23.325,18.643,22.592,19.763L25.313,22.485 22.485,25.314 19.791,22.62C18.668,23.383,17.383,23.924,16,24.189L16,28 12,28 12,24.163C10.638,23.88,9.378,23.322,8.274,22.554L5.514,25.314 2.686,22.485 5.504,19.668C4.802,18.57,4.306,17.331,4.068,16L0,16 0,12 4.144,12C4.427,10.722,4.943,9.533,5.656,8.485L2.686,5.515 5.514,2.686 8.513,5.684C9.558,5,10.734,4.499,12,4.236L12,0 16,0 16,4.21C17.285,4.456,18.48,4.946,19.545,5.626L22.485,2.686 25.313,5.515 22.431,8.397C23.176,9.467,23.718,10.685,24.008,12z" Fill="{TemplateBinding Foreground}" Height="12" Width="12" Stretch="Fill" VerticalAlignment="Center" HorizontalAlignment="Right"/>
我们的大多数控制模板都需要广泛使用矢量图形,并在这些路径上应用多种效果
出于性能原因,我们希望冻结这些路径的数据
,因为它不会被更改。我们使用的这种语法创建一个并为其分配数据StreamGeometry
是可自由化的,但我们如何在xaml中冻结它?您可以利用PresentationOptions:freeze=“True”
属性。你可以阅读更多关于它的内容
来自MSDN的摘要:
将包含Freezable元素的IsFrozed状态设置为true。
不带
PresentationOptions:指定的冻结属性为IsFreeze
加载时为false,取决于加载时的一般可释放行为
运行时
将isfreeze
设置为true与对可冻结对象调用Freeze()
完全相同
在您的情况下,需要将PathGeometry设置为冻结
<Path>
<Path.Data>
<PathGeometry PresentationOptions:Freeze="True"
Figures="..." />
</Path.Data>
</Path>
谢谢。但我该如何为数据设置它呢?
不是指“冻结路径对象”吗<代码>路径
不可冻结,但其数据可冻结。请参阅更新的答案。编辑:@Clemens comment指出,在使用数据属性标记时,StreamGeometry在默认情况下是冻结的。我不知道!如果有人没有使用数据语法,我会把这个答案保存在这里。当StreamGeometry在XAML中通过路径标记创建时,它已经被冻结了。@Clemens,谢谢。一开始我是这么想的。但我们如何才能确定一个对象是否在运行时被冻结?还有关于这件事的参考资料吗?@Clemens你说得对Path.Data.isfronged
返回true。您可以检查路径的数据的isfronged
属性。但无法快速找到MSDN上的任何参考。