【问题标题】:WPF toolkit how to properly add seriesWPF工具包如何正确添加系列
【发布时间】:2018-02-13 19:56:33
【问题描述】:

我正在尝试使用以下代码:

XAML:

<Grid x:Name="MainGrid">
    <charts:Chart x:Name="chart1"/>
</Grid>

我正在使用

xmlns:charts="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit

代码

using System.Windows.Controls.DataVisualization.Charting;
public MainWindow()
{
            InitializeComponent();
        PointCollection pc = new PointCollection();

        for (int i = 0; i < 100; i++)
        {
            pc.Add(new System.Windows.Point { X = i, Y = i * 2 });
        }

        LineSeries series1 = new LineSeries();
        series1.DependentValuePath = "Y";
        series1.IndependentValuePath = "X";
        series1.ItemsSource = pc;
        chart1.Series.Add(series1);
}

但我收到不支持的异常错误

Exception thrown: 'System.NotSupportedException' in PresentationFramework.dll

Additional information: Cannot convert the value in attribute 'Property' to object of type 'System.Windows.DependencyProperty'.

该错误伴随着“无可用来源”屏幕出现, 我正在使用 Visual Studio 2015。

我读到 chart.series 不是依赖属性,所以我的问题是为系列分配值的正确方法是什么?

【问题讨论】:

  • 请更具体...以下对我有用:xmlns:charts="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"(您使用不同的图表吗?)并在主窗口构造函数或加载事件中执行您的代码。因此,请确保包含重现错误所需的所有信息。
  • 正如评论,我无法重现您的问题。请准确解释您何时收到异常...您的代码是否会在那时执行,还是在InitializeComponentInitializeComponent 之前/期间发生?
  • 感谢您的回复。错误显示在此行弹出:chart1.Series.Add(series1); 我认为这与我的项目中捕获了太多 CLR 异常有关,当我启动默认项目时,我没有收到此错误,但是当我选择所有 CLR 异常类型时- 它显示
  • 希望您理解,当问题的根源是很多不属于问题的 CLR 异常时,我无法帮助您。我建议你从第一个 CLR 异常开始尝试解决它。​​
  • 你能确认一下这段代码是否代表了向图表添加值的正确方法吗?

标签: c# wpf charts wpftoolkit


【解决方案1】:

我读到 chart.series 不是依赖属性,所以我的问题是为系列分配值的正确方法是什么?

您应该在 XAML 中静态指定您的系列类型并将积分集合绑定为其ItemsSource

<Grid x:Name="MainGrid">
    <charts:Chart x:Name="chart1">
        <charts:Chart.Series>
            <charts:LineSeries IndependentValuePath="X" DependentValuePath="Y" ItemsSource="{Binding points}"/>
        </charts:Chart.Series>
    </charts:Chart>
</Grid>

初始化代码:

public MainWindow()
{
    InitializeComponent();

    PointCollection pc = new PointCollection();

    for (int i = 0; i < 100; i++)
    {
        pc.Add(new System.Windows.Point { X = i, Y = i * 2 });
    }

    // in some appropriate datacontext, set some object that contains your points collection for the binding
    chart1.DataContext = new { points = pc };
}

注意:这并不能解释问题中提到的错误,它只是一种定义图表的方法,它比问题方法具有更好的 View-ViewModel 分离。问题代码本身不足以重现错误。

【讨论】:

  • 好的,我可以重现它。我正在使用来自 NuGet 的 System.Windows.Controls.DataVisualization.Toolkit ver 4.0.0.0。如果你去 Debug -> Windows -> Exception Settings 并勾选所有 CLR Exceptions 它应该给你同样的错误我有
  • @SamHicks nuget 包 WPFToolkit.DataVisualization (3.5.50211.1) 和 WPF Toolkit (3.5.50211.1) 怎么样?据我所知,System.Windows.Controls.DataVisualization.Toolkit (4.0.0.0) 甚至没有 System.Windows.Controls.DataVisualization 命名空间。不,我真的没有得到异常,所以没有什么可以捕捉到的。
  • @SamHicks 明确一点:您创建了一个新的 WPF 项目,添加了 nuget 包,配置了异常中断,使用 only 网格/图表创建了窗口这里提到并只使用了这里显示的初始化代码,你仍然有异常吗?如果是这样,您可能需要添加所有内容,例如 VS 版本(您提到过)、.Net 版本等。
  • Microsoft Visual Studio Community 2015 Version 14.0.25431.01 Update 3 Microsoft .NET Framework Version 4.7.02046 是的,根据我在此处发布的信息,我尝试了一个新项目。更重要的是,选项:选项->调试->常规->仅启用我的代码-必须取消勾选才能获得此错误
  • @SamHicks 好的,我通过禁用 “仅启用我的代码” 设置确认了错误。现在至少可以仔细看看了,不知道能不能找出原因。
猜你喜欢
  • 2013-03-17
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 2013-03-22
  • 2018-10-06
  • 1970-01-01
  • 2013-01-26
相关资源
最近更新 更多