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。 –