3

我需要將應用程序樣式分隔爲幾個xaml文件。 但我也需要在單個文件在其他文件中定義的樣式定義一些共同的價值觀像winrt xaml合併資源

<x:Double x:Key="SharedValue">100</x:Double> 

使用此值。 例如:

<Style x:Name="SomeStyle" TargetType="TextBox"> 
    <Setter Property="Width" Value="{StaticResource SharedValue}"/> 
</Style> 

和其他資源字典文件:

<Style x:Name="AnotherStyle" TargetType="Button"> 
    <Setter Property="Height" Value="{StaticResource SharedValue}"/> 
</Style> 

但當我嘗試定義在App.xaml中合併資源字典文件

<Application.Resources> 
    <ResourceDictionary > 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="DefinedValues.xaml"/> 
      <ResourceDictionary Source="Styles1.xaml"/> 
      <ResourceDictionary Source="Styles2.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

我得到這個運行異常:「消息=」找不到具有名稱/密鑰共享值的資源「

你能告訴我這樣做是否可行?我做錯了什麼? 謝謝。

+0

你在哪裏看到信息?您是否試圖通過{StaticResource}訪問XAML中的資源? –

+0

在App.g.i.cs文件中將它作爲運行時未處理的異常處理時出現此錯誤,但intelisence不會將我的SharedValue點亮爲任何地方無法識別的。 –

+0

是的,這是可能的,我可以使用你的例子創建一個應用程序,它適用於我的項目。您確定您的App.xaml文件中有DefinedValues.xaml和另外兩個ResourceDictionaries的正確路徑嗎? –

回答

9

如果您在其他合併字典之間存在依賴關係,則使用合併字典可能會有點棘手。

當您有多個應用程序範圍資源時,聲明的順序非常重要。它們按照聲明的相反順序解決,所以在你的情況下你應該有這個命令。

<Application.Resources> 
<ResourceDictionary > 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Styles1.xaml"/> 
     <ResourceDictionary Source="Styles2.xaml"/> 
     <ResourceDictionary Source="DefinedValues.xaml"/> 

    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

此外,您可能需要參考其他資源字典中Styles1.xaml。這在Styles1.xaml中適用於我。

<ResourceDictionary "..."> 

    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="SharedValues.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 

    <Style x:Name="AnotherStyle" 
     TargetType="Button"> 
    <Setter Property="Height" 
      Value="{StaticResource SharedValue}" /> 
    </Style> 
</ResourceDictionary> 
+0

謝謝,這正是我正在尋找的! –

+0

僅供參考,當您獲得可接受的答案時,您可以提出答案,但您也應該「接受」答案。這樣,您在StackOverflow上的聲望就會提高,而且人們更有可能在未來幫助您。 –

+0

有關問題的更多信息,請參閱http://stackoverflow.com/faq#howtoask。 –