如何冻结路径数据

时间:2014-12-24 22:48:05

标签: wpf xaml freezable

我们的WPF应用程序中有许多复杂的Path。一个例子是:

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

我们的大多数控制模板都需要大量使用矢量图形,并且在这些路径上应用了多种效果。

出于性能原因,我们希望冻结这些路径的Data,因为它不会被更改。我们使用的这种语法会创建StreamGeometry并为其分配数据。 StreamGeometry可以冻结,但我们如何在我们的xaml中冻结它?

1 个答案:

答案 0 :(得分:1)

您可以使用PresentationOptions:Freeze="True"属性。您可以阅读更多相关信息here

MSDN摘要:

  

在包含Freezable元素上将IsFrozen状态设置为true。   没有的Freezable的默认行为   PresentationOptions:指定的冻结属性是IsFrozen   在加载时为false,并且取决于一般的Freezable行为   运行时。

IsFrozen设置为true与在Freezable对象上调用Freeze()完全相同。

在您的情况下,您需要将PathGeometry设置为冻结。

<Path>
    <Path.Data>
        <PathGeometry PresentationOptions:Freeze="True"
            Figures="..." />
    </Path.Data>
</Path>