首页 文章

WPF工具包:尝试交换轴时条形图轴错误

提问于
浏览
1

我正在创建一个程序来从文件中收集数据,分析它,并在条形图中显示数据 . 我正在使用WPF,因此我从NuGet中获取了WPFToolkit和WPFToolkit.DataVisualization . 使用一组非常基本的XAML,图表看起来很好,但是它的轴是交换的 - 它给了我一个水平条形图,我想要列 . 所以我尝试交换轴,并得到以下错误:

不能使用指定的独立轴 . 这可能是由于轴的未设置Orientation属性 .

这是我的代码,从我最终绑定到的集合中的项目定义开始:

Interval Summary

public class IntervalSummary
{
    public IntervalSummary()
    {
        Results = new List<PollResult>();
    }

    public DateTime PeriodStart { get; set; }

    public DateTime PeriodEnd { get; set; }

    public int MinimumItemCount { get; set; }

    public int MaximumItemCount { get; set; }

    public int AverageItemCount { get; set; }

    public List<PollResult> Results { get; set; }
}

Property in the ViewModel

请注意,我在这里使用Caliburn.Micro,因此 Set() 方法基本上处理将值设置为支持字段以及属性更改通知 .

public ObservableCollection<IntervalSummary> DataItems
{
    get { return _dataItems; }
    set { Set(ref _dataItems, value); }
}

Chart XAML

在View - Buttons,GroupPanels,TextBoxes等中有一大堆不相关的XAML(与这个问题无关) - 我已经测试过并且有效 . 因此,为了简洁起见,这只是Window定义(因此您可以看到XML名称空间声明)和图表声明 .

<Window x:Class="QueueMonitorAnalyzer.Views.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:QueueMonitorAnalyzer.Views"
        xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
        xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
        xmlns:toolkitEx="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
        mc:Ignorable="d">
    <Border Padding="5">
        <Grid>
            <datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
                <datavis:Chart.Series>
                    <datavis:BarSeries Name="BarSeries" Title="Items (Avg.)" 
                                   ItemsSource="{Binding Path=DataItems}"
                                       DependentValueBinding="{Binding Path=AverageItemCount}"
                                       IndependentValueBinding="{Binding Path=PeriodStart}">
                        <datavis:BarSeries.DependentRangeAxis>
                            <datavis:LinearAxis Orientation="Y" Title="Item Count"/>
                        </datavis:BarSeries.DependentRangeAxis>

                        <datavis:BarSeries.IndependentAxis>
                            <datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/>
                        </datavis:BarSeries.IndependentAxis>
                    </datavis:BarSeries>
                </datavis:Chart.Series>
            </datavis:Chart>
        </Grid>
    </Border>
</Window>

在一天结束时,这里的目标只是有一个柱形图 . 如果我遗漏了 <datavis:BarSeries.DependentRangeAxis><datavis:BarSeries.IndependentAxis> 我得到一个水平图表,所以我只是把它们放在那里试图交换轴并按照我想要的方向得到图表 .

我尝试了很多东西,包括使用不同的轴类型( LinearAxisDateTimeAxisCategoryAxis ) . 我也试过转储 IndependentAxis 定义(只留下 DependentRangeAxis ),但这给了我以下错误:

不能使用指定的从属轴 . 这可能是由于轴的未设置Orientation属性或绘制的值与轴支持的值之间的类型不匹配 .

基于此,我继续尝试将 IntervalSummary.AverageItemCount 数据类型更改为 doublefloat ,这让我无处可去 .

谁能看到我在这里做错了什么?

最后,早些时候我说过一组基本的XAML正确生成图表,但方向不正确 . 这是XAML的基本集:

<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
    <datavis:Chart.Series>
        <datavis:BarSeries Name="BarSeries" Title="Items (Avg.)" 
                        ItemsSource="{Binding Path=DataItems}"
                            DependentValueBinding="{Binding Path=AverageItemCount}"
                            IndependentValueBinding="{Binding Path=PeriodStart}">
        </datavis:BarSeries>
    </datavis:Chart.Series>
</datavis:Chart>

1 回答

  • 1

    如果要显示列,则应使用 ColumnSeries

    <datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue">
        <datavis:Chart.Series>
            <datavis:ColumnSeries Name="BarSeries" Title="Items (Avg.)" 
                                  ItemsSource="{Binding DataItems}"
                                  DependentValuePath="AverageItemCount"
                                  IndependentValuePath="PeriodStart">
                <datavis:ColumnSeries.DependentRangeAxis>
                    <datavis:LinearAxis Orientation="Y" Title="Item Count"/>
                </datavis:BarSeries.DependentRangeAxis>
                    <datavis:ColumnSeries.IndependentAxis>
                    <datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/>
                </datavis:BarSeries.IndependentAxis>
            </datavis:ColumnSeries>
        </datavis:Chart.Series>
    </datavis:Chart>
    

    有关更多信息,请参阅以下文章:https://www.codeproject.com/Articles/196502/WPF-Toolkit-Charting-Controls-Line-Bar-Area-Pie-Co

相关问题