2014-12-24 48 views
1

我們在我們的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

StreamGeometry在通過路徑標記在XAML中創建時已經凍結。 – Clemens

+0

@Clemens謝謝。起初我是這麼想的。但是,我們如何能夠看到一個對象在運行時是否被凍結以確定?有關此事的任何參考? – SepehrM

+0

@Clemens你是對的。 'Path.Data.IsFrozen'返回true。 – SepehrM

回答

1

您可以使用PresentationOptions:Freeze="True"屬性。你可以閱讀更多關於它here。從MSDN

總結:

設置的isFrozen狀態爲真含可凍結元件上。 Freezable的默認行爲不帶 PresentationOptions:指定的凍結屬性是在加載時IsFrozen爲 false,並且依賴於運行時的一般Freezable行爲。

IsFrozen設置爲true與在Freezable對象上調用Freeze()完全相同。

你的情況,你需要設置PathGeometry凍結。

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

謝謝。但是,我如何設置數據呢?不是''意思是「凍結路徑對象」? 'Path'不是可凍結的,但它的'Data'是。 – SepehrM

+0

查看更新的答案。編輯:@Clemens評論指出,當使用數據屬性標記時,StreamGeometry默認是凍結的。我不知道這個!如果有人不使用Data語法,我會在這裏保留這個答案。 –