【问题标题】:Get the value of automatic interval for LinearAxis on Chart (System.Windows.Controls.DataVisualization.Charting)获取图表上 LinearAxis 的自动间隔值 (System.Windows.Controls.DataVisualization.Charting)
【发布时间】:2023-03-28 06:31:02
【问题描述】:

我有一个使用 System.Windows.Controls.DataVisualization.Charting 的 .NET 项目。

在创建新的 LinearAxis 时,我省略了 Interval,以便自动计算它,如下所示:

new LinearAxis()
{
    Title = "My Data",
    ShowGridLines = true,
    Orientation = AxisOrientation.Y,
    Maximum = 100
}

我想添加一个辅助 Y 轴。但是,要使两个轴上的刻度线对齐,我需要根据我的第一个 Y 轴的间隔显式设置我的第二个 Y 轴的间隔。

问题是,我的第一个 Y 轴的间隔是自动计算的,并返回 Null。 ActualInterval 返回 0。

如何获取使用自动 Interval 创建的 LinearAxis 的 Interval 值,如上面的代码?

【问题讨论】:

    标签: c# .net wpf xaml charts


    【解决方案1】:

    你可以通过Binding来实现,如下:

        <chartingToolkit:Chart Margin="0" Title="Chart Title">
            <chartingToolkit:Chart.Axes>
                <chartingToolkit:LinearAxis x:Name="ax1" 
                                            Orientation="Y" 
                                            ShowGridLines="True" 
                                            Title="First Axis"
                                            Minimum="0"
                                            />
                <chartingToolkit:LinearAxis x:Name="ax2" 
                                            Orientation="Y" 
                                            ShowGridLines="True" 
                                            Title="Second Axis"
                                            Interval="{Binding ElementName=ax1, Path=ActualInterval}" 
                                            Maximum="{Binding ElementName=ax1, Path=ActualMaximum}" 
                                            />
            </chartingToolkit:Chart.Axes>
            <chartingToolkit:ColumnSeries DependentValuePath="Y" IndependentValuePath="X" ItemsSource="{Binding}"/>
        </chartingToolkit:Chart>
    

    编辑:这是之前 XAML 的代码隐藏等效项:

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            chart1 = new Chart();
    
            LinearAxis ax1 = new LinearAxis
            {
                Title = "First Axis",
                ShowGridLines = true,
                Orientation = AxisOrientation.Y,
                Minimum = 0
            };
    
            Binding b1 = new Binding();
            b1.Source = ax1;
            b1.Path = new PropertyPath("ActualInterval");
    
            Binding b2 = new Binding();
            b2.Source = ax1;
            b2.Path = new PropertyPath("ActualMaximum");
    
            LinearAxis ax2 = new LinearAxis
            {
                Title = "Second Axis",
                ShowGridLines = true,
                Orientation = AxisOrientation.Y
            };
    
            ax2.SetBinding(LinearAxis.IntervalProperty, b1);
            ax2.SetBinding(LinearAxis.MaximumProperty, b2);
    
            chart1.Axes.Add(ax1);
            chart1.Axes.Add(ax2);
    
            PointCollection pc = new PointCollection();
            pc.Add(new Point { X = 1, Y = 10 });
            pc.Add(new Point { X = 2, Y = 20 });
            pc.Add(new Point { X = 3, Y = 30 });
            pc.Add(new Point { X = 4, Y = 40 });
    
            ColumnSeries series = new ColumnSeries();
            series.ItemsSource = pc;
            series.DependentValuePath = "Y";
            series.IndependentValuePath = "X";
    
            chart1.Series.Add(series);
            AddChild(chart1);
        }
    

    【讨论】:

    • 这是一个很好的答案。就我而言,我没有使用绑定,而是在内存中创建一个图表,然后将其保存为图像,以便导出为 PDF、Word 等。还有其他方法吗?
    • 请看我的编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2020-07-05
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多