2012-03-02 27 views
0

假設我有一個顯示UserControl的窗口。該用戶控件包含需要引用Window.Resources定義的命名風格的一個TextBox:窗口的詞法分析順序 - > UserControl

<Window.Resources> 
    <Style TargetType="TextBlock" x:Key="myStyle"> 
     <Setter Property="FontSize" Value="20" /> 
    </Style> 
</Window.Resources> 

如果我做的:

<TextBlock Style="{StaticResource myStyle}">Hello</TextBlock> 

的XamlParseException異常(System.Windows.StaticResourceExtension「上提供價值」 '拋出一個異常')將在應用程序運行時拋出。

如果我改變參照DynamicResource,一切工作正常:

<TextBlock Style="{DynamicResource myStyle}">Hello</TextBlock> 

是否靜態資源引用失敗,因爲該用戶控件的XAML中包含它的窗口前詞法分析?換句話說,就XAML解析器而言,是在UserControl之後定義的Windows.Resources?

謝謝!
Ben

回答

0

是的,這是正確的 - XAML解析器在使用StaticResource標記擴展時可以找到的限制非常有限。這與訂單沒有多大關係 - 每個XAML文件幾乎都是它自己的範圍,如果它們位於不同的文件中,則無法看到其他資源。正如您所指出的那樣,您可以改用DynamicResource。如果您想要StaticResource的好處(特別是設計時支持),您還可以在資源中合併字典(http://msdn.microsoft.com/en-us/library/system.windows.resourcedictionary.mergeddictionaries.aspx)用戶控件字典,以將XAML解析器引入其應考慮的其他資源「範圍」中。

我認爲合併字典可能無法在這種特殊情況下工作,因爲我懷疑如果您將父範圍合併到子資源字典中,您可能會得到重複的定義錯誤(我沒有針對此特定情況對其進行測試不過,也許XAML會覆蓋整個)。