0

我正在使用 WPF Toolkit ( System.Windows.Controls.DataVisualization.Toolkit) 来生成一个简单的图表。为了将 Y 轴设置为从零值开始,我将Chart.Axes属性设置如下:

<chartingToolkit:Chart Width="800" Height="400" Title="Usage" Style="{StaticResource ChartStyle}">
    <chartingToolkit:Chart.Axes>
        <chartingToolkit:LinearAxis Orientation="Y" Minimum="0" />
    </chartingToolkit:Chart.Axes>

    <chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding Data}" />

</chartingToolkit:Chart>

这工作正常。但是,当我尝试通过 a 设置此属性时Style,智能感知甚至不显示Axes.

<Style x:Key="ChartStyle" TargetType="{x:Type chartingToolkit:Chart}">
    <Setter Property="Axes">
        <Setter.Value>
            <chartingToolkit:LinearAxis Orientation="Y" Minimum="0" />
        </Setter.Value>
    </Setter>
</Style>

如果我运行代码,我会ArgumentNullExceptionProperty不能为空。这是Style.Setter.Property. 我查看了 Codeplex 的源代码并找到了该Axes属性:

[SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Setter is public to work around a limitation with the XAML editing tools.")]
[SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value", Justification = "Setter is public to work around a limitation with the XAML editing tools.")]
public Collection<IAxis> Axes
{
    get
    {
        return _axes;
    }
    set
    {
        throw new NotSupportedException(Properties.Resources.Chart_Axes_SetterNotSupported);
    }
}

它在这里说 Setter 是公开的,但我找不到任何这样的公开方法。现在我的问题是:

  1. 通过 Style 设置属性在技术上与此问题中的第一个代码块有何不同?
  2. 有没有办法Axes通过样式设置属性?
  3. 我是否仍应将 WPF 工具包用于图表?是否有更新的“佳能”方法来生成我不知道的图表?
4

2 回答 2

2

你很接近:)

您必须将样式附加到 linearAxis 本身,因为图表样式中没有访问器。

风格是这样的:

<Style x:Key="linearAxisStyle" TargetType="{x:Type charting:LinearAxis}">
        <Setter Property="Orientation" Value="Y" />
        <Setter Property="Minimum" Value="0" />
</Style>

绑定是这样的:

<chartingToolkit:Chart Width="800" Height="400" Title="Usage" Style="{StaticResource ChartStyle}">
<chartingToolkit:Chart.Axes>      
  <chartingToolkit:LinearAxis Style="{StaticResource linearAxisStyle}" />
<chartingToolkit:Chart.Axes/>

<chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding Data}" />

于 2013-07-16T10:36:33.587 回答
0

自从您更改请求后,我将在新项目中回答....

您希望默认语法是这样的:

<Style x:Key="linearAxisStyle_Alt" TargetType="{x:Type charting:Chart}">
        <Setter Property="Axes">
            <Setter.Value>
                <Setter Property="LinearAxis">
                    <Setter.Value>
                        <charting:LinearAxis Orientation="Y" Minimum="0" />
                    </Setter.Value>
                </Setter>
            </Setter.Value>
        </Setter>
</Style>

问题(实际上不是问题)是“轴”元素没有样式属性。因此,您不能设置由其子项继承的样式 - LinearAxis。这就是您收到错误消息的原因:“属性不能为空”。当然不能,因为它不存在。

所以对您的要求的最终答案是 - (不幸的是)这是不可能的。希望这能让您更好地理解。

于 2013-07-16T12:34:23.720 回答