我希望在应用运行时,从c#代码更改xaml中SolidColorBrush
的颜色。
(这是来自WinRT XAML Toolkit的饼图,我想要更改切片的颜色。)
<charting:Chart.Palette>
<charting:ResourceDictionaryCollection>
<ResourceDictionary>
<SolidColorBrush x:Key="MyBrush" Color="#4586d8"/>
<Style x:Key="DataPointStyle" TargetType="Control">
<Setter Property="Background" Value="{StaticResource MyBrush}"/>
</Style>
</ResourceDictionary>
</charting:ResourceDictionaryCollection>
</charting:Chart.Palette>
由于Win8应用程序中没有DynamicResource,这就是我试图设置但没有成功的方式:
Color yellow = Color.FromArgb(0xff, 0xff, 0xb9, 0x01);
Application.Current.Resources["MyBrush"] = new SolidColorBrush(yellow);
我如何设置资源的颜色?
答案 0 :(得分:1)
我认为在WPF中DynamicResource
基本上会在每次请求时创建一个新实例,并会重新评估资源依赖关系层次结构中的更改。根据您的要求,您可以根据具体情况采用不同的方法。您可以更新样式/模板以更改基色,您可以更改可视状态以使这些响应状态更改以更改颜色,您可以编写附加行为(直接使用附加属性或某些开源WinRT行为)您将在数据点上设置将根据事件或绑定属性更新画笔,您可以遍历可视树以更新颜色,或者您可以创建两个几乎相同,重叠的图表控件,使用不同的颜色并更改颜色通过更改图表控件的可见性。然后,也许你可以以某种方式将饼图数据点的画笔绑定到基础数据 - 我没有检查是否可能,但如果不是 - 你可以修改图表控件的代码给你那个功能(这是开源的力量!)