首页 文章

WPF制作交互式图表

提问于
浏览
1

我在WPF应用程序中使用 System.Windows.Controls.DataVisualization.Toolkit 表示图表 . 图表的代码是:

<chartingToolkit:Chart>
                        <!-- Volume -->
                        <chartingToolkit:LineSeries
                            Title="Volume (M)"
                            ItemsSource="{StaticResource StockDataCollection}"
                            IndependentValuePath="Date"
                            DependentValuePath="Volume"/>
                        <!-- Price -->
                        <chartingToolkit:LineSeries
                            Title="Price ($)"
                            ItemsSource="{StaticResource StockDataCollection}"
                            IndependentValuePath="Date"
                            DependentValuePath="Price"/>
                        <chartingToolkit:Chart.Axes>
                            <!-- Axis for custom range -->
                            <chartingToolkit:LinearAxis
                                Orientation="Y"
                                Minimum="0"
                                Maximum="100"
                                ShowGridLines="True"/>
                            <!-- Axis for custom labels -->
                            <chartingToolkit:DateTimeAxis
                                Orientation="X">
                                <chartingToolkit:DateTimeAxis.AxisLabelStyle>
                                    <Style TargetType="chartingToolkit:DateTimeAxisLabel">
                                        <Setter Property="StringFormat" Value="{}{0:MMM d}"/>
                                    </Style>
                                </chartingToolkit:DateTimeAxis.AxisLabelStyle>
                            </chartingToolkit:DateTimeAxis>
                        </chartingToolkit:Chart.Axes>
                    </chartingToolkit:Chart>

我希望用户能够在任何点单击线系列并将其向上或向下拖动,以便更改值?这就像双向数据绑定,但我不知道如何做到这一点 .

2 回答

  • 1

    WPF Toolkit图表控件没有任何代码来处理鼠标拖动,因此您必须自己编写 .

    您应该能够继承 LineDataPoint 以添加拖动功能,然后子类 LineSeries 并覆盖 CreateDataPoint() 以创建自定义LineDataPoint项目 .

    在这种情况下, ItemsSource 将不是IEnumerable值(例如 IEnumerable<decimal> ),而是值持有者对象(例如 IEnumerable<MyValueObject> ) . 值持有者对象将具有可用于在该点检索或设置值的属性,允许通过将 DependentValueBinding 设置为与属性的 TwoWay 绑定来更新值 . 您可以在应用程序中重用现有对象,而不是专门为此目的创建值保持器对象 .

  • 0

相关问题