在App.xaml中定义颜色并用作静态资源

时间:2015-05-13 20:05:34

标签: wpf xaml

编辑:看起来这与我宣布颜色的方式有关 - 使用十六进制值似乎可以很好地完成它。

编辑:这是关于引用来自 App.xaml文件。如果声明为本地资源,颜色本身可以正常工作。

我创造了一种颜色:

<SolidColorBrush x:Key="TestBlue">
    <SolidColorBrush.Color>
        <Color R="0" G="86" B="45"/>
    </SolidColorBrush.Color>
</SolidColorBrush>

并将其放在ResourceDictionary中。然后我在MergedDictionary中引用它:

<Application.Resources>
        <ResourceDictionary>
            <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True"/>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary  Source="Colours.xaml"/>
                <ResourceDictionary  Source="View\Item\ItemResource.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
  </Application.Resources>

当我将Button作为StaticResource应用于Button的背景时,它不适用:

Background="{StaticResource TestBlue}" 

当我Snoop控件时,它将Background声明为其他值: Background

如果我将其作为自身的条目(如ViewModelLocator),它也不起作用。如果我将它放在Window.Resources中它确实有效。任何想法在这里发生了什么?

2 个答案:

答案 0 :(得分:3)

您需要为Alpha(透明度)通道提供值,因为Color是结构,并且该值的默认值为零(透明)。

<Color A="255" R="0" G="86" B="45"/>

答案 1 :(得分:0)

要将其用作StaticResource,您必须将ResourceDictionnary包含在要使用资源的位置。否则,您必须将其用作DynamicResource。

因此,如果您的按钮位于其自己的xaml文件中,则必须将您的ResourceDictionnary包含在按钮的xaml文件中,就像在App.xaml中一样。