2011-12-22 438 views
0

首先,我搜索了很長時間,很難找到答案。我在這裏求助於這個問題的專家。爲什麼需要StaticResource?

我正在閱讀一本關於Windows Phone 7編程的書。我目前正在學習數據綁定(並且也做得很好)。我遇到過關於WPF中DataBinding格式的問題,主要是關於StaticResource的功能。

在下面的代碼中,您將看到有一個滑塊和一個文本塊。文本塊綁定到滑塊,這樣當滑塊移動時,文本塊的值會更改。已經創建了一個類TruncationConverter,並且可以在XAML中使用關鍵字「truncate」進行調用。它在電話中聲明:ApplicationPage.Resources。

所以,這是正確的

<TextBlock Name="txtblk" 
Text="{Binding ElementName=slider, 
Path=Value, 
Converter={StaticResource truncate}}" 

這是不對的

<TextBlock Name="txtblk" 
Text="{Binding ElementName=slider, 
Path=Value, 
Converter=truncate}" 

這本書從來沒有真正走進去解釋爲什麼一個必須的功能之前把靜態資源。

所以,問題是,爲什麼你需要在調用之前放置StaticResource?它做什麼,它的功能是什麼?爲什麼在截斷之前沒有放置StaticResource時會出現錯誤。

在此先感謝!

回答

0

基本上將StaticResource的告訴它來尋找可能在ResourceDictionary中的外部財產持有的比如函數「截斷」

所以像另一個例子是,如果我去,說創建另一個控制或轉換器或即使是一個筆刷或其他實例,我希望在整個應用程序的其他元素中都可以使用它,它被創建爲僅在一個點(資源字典)中可編輯但可供所有人使用的可用資源,例如; a StaticResource

就像您放置滑塊和文本塊時一樣,它默認情況下會調用CoreStyles資源字典中每個找到的樣式。如果我想改變他們所做的或者他們想要的東西,例如我可以複製資源,根據需要對其進行編輯,重新命名,然後通過

+0

2011-12-22 21:54:21

1

來調用它。Converter類的構造函數使用標記擴展工作。標記擴展要求對象先前在對象圖中定義,並且在爲轉換器類指定鍵時完成此操作。當Xaml解析器看到StaticResource(或DynamicResource)時,它開始在對象圖中向上查找,直到找到該值。在運行時,會創建一個類的實例並用於進行轉換。一旦你的轉換器的一個實例被創建,WPF就會在你的應用程序的生命週期中使用它,因此是'靜態'。

'StaticResource'可能看起來無關或冗餘,因爲轉換器不能是DynamicResource,但這些是Xaml的語法規則。

+0

這是兩個很好的答案!嗯... – parion 2011-12-22 22:17:46

+0

如果你得到了開創性的Petzold文本,「應用程序=代碼+標記」,你將有很多WPF內部的很好的參考。 – 2011-12-23 12:26:38