在Windows 8应用程序中使用c#代码更改资源颜色



我想从c#代码中更改xaml中SolidColorBrush的颜色,而应用程序正在运行。(这是一个饼图从WinRT XAML工具包,我想改变切片的颜色。)

<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);

如何设置资源的颜色?

我认为在WPF DynamicResource中,每次请求时都会创建一个新实例,并重新评估资源依赖层次结构的变化。根据你想要做什么,你会以不同的方式处理它。可以更新的样式/模板更改基础颜色,你可以改变视觉状态让这些回复状态改变会改变颜色,您可以编写一个附加行为(使用一个附加属性WinRT行为直接或一些开源实现),你将在你的数据点会更新刷基于事件或绑定属性,您可以基于遍历视觉树更新颜色或者你可以创建两个几乎相同,使用不同颜色覆盖图表控件,并通过更改图表控件的可见性来更改颜色。然后,也许您可以以某种方式将饼图数据点的笔刷绑定到底层数据—我没有检查过这是否可行,但如果不可行—您可以修改图表控件的代码以提供该功能(这是开源的力量!)

最新更新