动态颜色资源在WPF中表现奇怪

时间:2016-11-09 21:02:30

标签: wpf xaml

在我的应用程序中,我有一些在字典中定义的资源,它们都被合并到App.xaml中,一切正常。但是我一直试图在我的应用程序中添加第二个主题。我已经在默认位置定义了所有画笔,并且每个主题定义了颜色:

在共享的Brushes.xaml中:

<SolidColorBrush x:Key="ForegroundBrush" Color="{DynamicResource ForegroundColor}" />

然后每个主题都有一个Colors.xaml字典,其中定义了所有颜色:

<Color x:Key="ForegroundColor">#FF112233</Color>

基本字典ResourceLibrary.xaml将所有样式,画笔等合并在一起然后合并到App.xaml中,而Colors.xaml被主题管理器合并到App.xaml中(Infragistics,但我也尝试过合并它)。像这样,没有任何东西出现。但是,如果我将ResourceLibrary.xaml合并到我的视图中,则所有内容都会显示在该视图上。当我没有合并它并且我看不到任何东西时,我仍然可以使用实时视觉树来查找控件,并且它们应用了所有正确的样式和所有内容,包括具有预期资源键的正确画笔。 ..但是颜色总是#00FFFFFF(我假设它是Color的默认值)。所以它能够找到从App.xaml到颜色的所有内容,但似乎无法找到颜色。

这是另一件值得注意的事情......如果我将ResourceLibrary.xaml合并到我的窗口,然后在窗口上托管另一个用户控件,则用户控件可以访问所有颜色,除了主机上使用的颜色之外窗口。如果窗口上没有使用画笔,它会在用户控件上正确显示,如果它被窗口使用,那么它会在窗口中正确显示,但在用户控件中它具有#00FFFFFF颜色。

我现在已经反对这三天了,已经多次完全循环,我现在完全没有想法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

遇到同样/类似的问题并弄清楚了。对于其他有这个问题的人来说,这就是我所做的:

我必须将样式中的画笔引用设置为StaticResources,并将画笔中的颜色引用设置为DynamicResources。现在当我交换主题(单独的资源字典与颜色)时,一切都正确更新。这是一个例子:

隐式标签样式(注意ForegroundBrush设置为StaticResource):

<Style x:Key="LabelStyle" TargetType="{x:Type Label}">
    <Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
</Style>

以上样式引用的画笔:

<SolidColorBrush x:Key="ForegroundBrush" Color="{DynamicResource ForegroundColor}" />

这些颜色存在于单独的“主题”资源词典中,这些词典在运行时交换以更新主题。

灯光主题(文字颜色)

<Color x:Key="ForegroundColor">Black</Color>

黑暗主题(文字颜色)

<Color x:Key="ForegroundColor">White</Color>