如何在WP-App中全局定义颜色资源

时间:2015-11-12 14:39:52

标签: c# xaml windows-phone-8.1 resourcedictionary app.xaml

我想在我的WindowsPhone 8.1 Silverlight应用程序的单独文件中定义我的颜色和样式。我的档案:

Colors.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <SolidColorBrush x:Key="AppColor1Brush">#1D8530</SolidColorBrush>

</ResourceDictionary>

Styles.xaml

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style x:Key="Text1Style" TargetType="TextBlock">
        <Setter Property="Foreground" Value="{StaticResource AppColor1Brush}" />
        <Setter Property="TextWrapping" Value="Wrap" />
        <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeNormal}"/>
    </Style>

</ResourceDictionary>

然后在我的App.xaml文件中,我尝试合并这些资源字典:

的App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyProject;component/Resources/Colors.xaml" />
            <ResourceDictionary Source="/MyProject;component/Resources/Styles.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

但这不起作用。我得到以下异常:

  

类型的第一次机会异常   'System.Windows.Markup.XamlParseException'发生在   System.Windows.ni.dll

     

其他信息:无法找到名称/密钥的资源   AppColor1Brush

当我将Colors.xaml中的颜色定义移动到Styles.xaml时,一切正常。所以我的问题:这甚至可能吗?我应该使用StaticResource以外的其他内容吗?提前致谢

1 个答案:

答案 0 :(得分:2)

您必须在Styles.Xaml中引用Colors.Xaml,因为您在那里使用StaticResource引用。每个xaml资源字典都需要在MergedDictionaries中提供所有引用(StaticResources)。

将Styles.Xaml修改为:

<ResourceDictionary
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
           <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/MyProject;component/Resources/Colors.xaml" />
                <!-- Also add the resource reference for your font style PhoneFontSizeNormal -->
            </ResourceDictionary.MergedDictionaries>

        <Style x:Key="Text1Style" TargetType="TextBlock">
            <Setter Property="Foreground" Value="{StaticResource AppColor1Brush}" />
            <Setter Property="TextWrapping" Value="Wrap" />
            <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeNormal}"/>
        </Style>

    </ResourceDictionary>