在WPF中动态更改Setter值

3
我正在尝试动态更改setter值。虽然我部分成功了,但仍然无法进一步进行。我的尝试是根据系列更改wpf工具包生成的柱形图的列颜色。我使用单独类的静态成员来设置柱形数据点的背景属性的颜色。通过这种方式,只有最终指定的颜色被设置到所有柱子上,而不管它们是否属于不同的系列。以下是有用的代码片段:
列数据点样式定义如下xaml:
<local:MyBackColor x:Key="mybackresource"></local:MyBackColor>
<Style x:Key="InfocruiserAquaColumn" TargetType="DVC:ColumnDataPoint">
    <Setter Property="Background" Value="{Binding Source={StaticResource mybackresource}, Path= myBackColor}"/>
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1" />...

设置颜色的类:

public class MyBackColor {
    private static String _myBackColor;


    public static String myBackColor
    {
        get { return _myBackColor; }

        set
        {
            _myBackColor = value;
            //Helpers.InvokePropertyChanged(PropertyChanged, this, "Grade");
        }
    }
}

在代码中设置颜色:

 //Changing the column color
                MyBackColor.myBackColor = colorValue;

                myStyle = (Style)FindResource("InfocruiserAquaColumn");

                ColumnSeries myColumnSeries = new ColumnSeries();
                myColumnSeries.Title = "Experience";

                myColumnSeries.ItemsSource = seriesData;

                myColumnSeries.IndependentValueBinding = new Binding("Key");
                myColumnSeries.DependentValueBinding = new Binding("Value");
                myColumnSeries.Background = new SolidColorBrush(Colors.Black);


                myColumnSeries.DataPointStyle = myStyle;

                mcChart.Series.Add(myColumnSeries);

非常感谢您的帮助。


2
那么问题到底是什么? - Daniel Hilgarth
嗨,丹尼尔,感谢您的快速回复。问题是当我想创建两个系列I并使用两种不同的颜色时,我无法动态地完成它。只有最终分配给myBackColor的颜色被分配为所有系列的颜色。 - picmate 涅
1个回答

2

我认为你需要同时使用NotifyPropertyChange(为什么它被注释掉了?)和将Background设置为DynamicResource:

<Setter Property="Background" 
      Value="{Binding Source={DynamicResource mybackresource}, Path= myBackColor}"/>

在评论后:

你目前的解决方案行不通。当你执行

   myColumnSeries.DataPointStyle = myStyle;

你只是存储了样式的引用,而不是副本。因此,所有系列仍然共享相同的样式(即最后一个样式)。

你需要使用类似以下的内容(不完整的答案):

myColumnSeries.DataPointStyle = new Style();
myColumnSeries.DataPointStyle.Background = ...

或许你可以只设置系列的颜色,并对其他属性使用共享样式。


嗨,亨克,感谢您的快速回答。我是wpf新手,不太明白如何设置NotifyPropertyChange并使其在此上下文中发挥作用以解决我的问题。您能给我解释一下吗?提前致谢。 - picmate 涅
嗨,Henk,当我将源属性设置为Dynamic时,我会收到以下错误:无法在类型为“Binding”的“Source”属性上设置“DynamicResourceExtension”。只能在DependencyObject的DependencyProperty上设置“DynamicResourceExtension”。我该怎么办? - picmate 涅
嗨,亨克,再次感谢您宝贵的建议。我将尝试调整代码以使其正常工作。此外,我认为您可以发现我正在使用模板来设置列数据点样式,如果在代码中完成整个过程会很不方便。但是,如您所解释的分离背景属性,我想应该可以行得通。我会尝试一下。谢谢。 - picmate 涅

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接