动态资源和合并字典级别

时间:2016-01-07 13:54:10

标签: wpf dictionary

我有以下资源字典配置:

ColorsDic.xaml包含

<Color x:Key="MyColor">#FF39ADFB</Color>
<SolidColorBrush x:Key="GenericBackColor" Color="{DynamicResource  MyColor}"/>
<SolidColorBrush x:Key="ControlDark" Color="{DynamicResource MyColor}"/>
<SolidColorBrush x:Key="ControlLight" Color="{DynamicResource MyColor}" opacity="0.3"/>

MainDic.xaml包含

<ResourceDictionary.MergedDictionaries >
  <ResourceDictionary Source="./Recursos/ColorsDic.xaml"/>
</ResourceDictionary.MergedDictionaries >

<Style x:Key="MyButtonStyle" TargetType="{x:Type Button}" >
    <Setter Property="Background" Value="{StaticResource GenericBackColor}"></Setter>
    <Setter Property="Foreground" Value="{Binding Path=Background,RelativeSource={RelativeSource Self}, Converter={StaticResource BackToForeColor}}"></Setter>
</Style>

现在问题: 我做了一个用户控件,其中包含一个前面定义的样式的按钮,其主背景颜色设置为“ControlDark”实心画笔。当我从应用程序主窗口更改“MyColor”的值时,按钮会进行所有更改,但不会获取用户控件的背景。 有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试将Static的背景属性设置器按钮从StaticResource更改为DynamicResource。

如果您尝试在运行时更改颜色,静态资源仅在实例化时抓取资源,并在资源更改时不更新。

编辑: 如果问题出在用户控件的背景上,则可以使用边框设置用户控件的背景:

<Grid>
    <!-- Pick a backgound color here-->
    <Border Background="Red"/>

    <Button Content="TEST" Height="20" Width="50"/>
</Grid>

如果用户控件不需要背景且只有其中的控件执行操作,则将用户控件的背景设置为透明:

<UserControl x:Class="UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         xmlns:local="clr-namespace:WpfApplication5"
         Background="Transparent">
    <Grid>
        <Button Content="TEST" Height="20" Width="50"/>
    </Grid>
</UserControl>