我有一组可视化画笔,它是一组形状,其主要颜色本身就是动态资源 - 所以形状例如是MyShape和由Shape对象引用的Color,MyColour。
我的问题是当我为此更新颜色时 - 它只在第一次加载形状时发生(颜色需要先设置)然而,尽管我更改了颜色但它不会更新使用颜色的动态资源 - 我该如何工作?
只需要让动态资源在另一个动态资源中工作,并在我改变颜色时让它们都更新
我不知道如何让它工作 - 我花时间为WPF创建一个颜色选择器只发现我无法改变这个项目的颜色 - 1层资源工作在哪里我直接设置画笔/颜色而不是颜色在另一个对象或2层资源中。
编辑:我的问题似乎特定于在单独的资源/词典中使用这些,因为我的程序需要从不是Window的类访问此项目,当MyColor位于单独的资源中时,提到的主要示例不起作用
答案 0 :(得分:6)
除非我误解了这种情况,否则你所谈论的确实很有效。我刚刚尝试了这个Xaml:
<Window x:Class="ConditionalTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<SolidColorBrush x:Key="MyColor" Color="Aqua" />
<VisualBrush x:Key="MyBrush">
<VisualBrush.Visual>
<Ellipse Height="50" Width="100" Fill="{DynamicResource MyColor}" />
</VisualBrush.Visual>
</VisualBrush>
</Window.Resources>
<Grid Background="{DynamicResource MyBrush}">
<Button Height="30" Width="Auto" VerticalAlignment="Center" HorizontalAlignment="Center" Content="ChangeColor" Click="Button_Click" />
</Grid>
</Window>
然后更改该按钮的单击处理程序中的颜色:
private void Button_Click(object sender, RoutedEventArgs e)
{
((SolidColorBrush)Resources["MyColor"]).Color = Colors.Purple;
}
它就像一个冠军。
答案 1 :(得分:0)
您是否可以发布一个示例,说明您是如何尝试更改资源字典中的颜色的?
当我制作示例应用并尝试更改资源值时,似乎资源字典中的SolidColorBrush已被冻结,因此无法修改。为了解决这个问题,我只需将新值设置为新的SolidColorBrush。