WinRTXAML 图表,顶部标签的控件样式,代码

WinRTXAML chart, control style for top label, code

我正在使用 WinRTXamlToolkit.Controls.DataVisualization.Charting.Chart object,从属轴整数为 0/1,独立时间轴。 我想抑制或旋转图表顶部的标签。 样式是在轴 (chart.Axes) 还是系列 (LineSeries) 上找到的? 我的图表完全通过代码配置,片段如下:

编辑 1/30/2017-3:添加了托管 XAML 页面。

<Page
    x:Class="HomeControl.Views.Historical"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:Charting="using:WinRTXamlToolkit.Controls.DataVisualization.Charting"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HomeControl.Views"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Charting:Chart x:Name="LineChart" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Top" Height="500">
        </Charting:Chart>
    </Grid>
</Page>

编辑 1/30/2017-2:添加了剩余代码...

var lowDate = records.First().taken.DateTime;
var highDate = records.Last().taken.DateTime;

var allDeviceTelemetry = records.GroupBy(t => t.sensorid).OrderBy(g => g.Key);

var axisTaken = new DateTimeAxis()
    {
        Title = "Taken",
        Orientation = AxisOrientation.X,
        IntervalType = DateTimeIntervalType.Minutes,
        Interval = 5,
        Minimum = lowDate,
        Maximum = highDate,
};
LineChart.Axes.Add(axisTaken);

LineChart.Axes.Add(new LinearAxis()
{
    Title = "State",
    Orientation = AxisOrientation.Y
});

foreach (var deviceTelemetry in allDeviceTelemetry)
{
    var series = new LineSeries()
    {
        Title = deviceTelemetry.Key, // sensorid
        IndependentValuePath = "taken",
        DependentValuePath = "sensorvalueint",
        ItemsSource = deviceTelemetry
    };
    LineChart.Series.Add(series);
}

我试图控制的区域是绿色的:

我试过其他一些样式,例如间隔和轴标题,但我就是想不通数据点标签样式在哪里?

编辑 2017 年 1 月 30 日: 这是树,突出显示 object(底部的 TextBlock)。我需要弄清楚如何通过代码设置 "AxisLabel"、"Panel"、"AxisGrid" 或 "CategoryAxis" 的样式。

如有任何提示,我们将不胜感激!

-约翰

不是一个完整的答案,因为我不知道你是如何让标签显示在顶部的,但在我看来,它们更多的是数据点标签而不是轴标签。 运行 该工具包的示例应用程序可能会帮助您稍微浏览一下 UI 树并使探索事物变得更加容易。只需在您的 VS 中获取工具包的源代码,按 F5,打开图表控件示例并在指向标签时按 Ctrl+Shift。这是我指向类别轴时得到的结果:

我会四处查看数据点、系列并搜索 属性 称为样式。否则 - 浏览源代码以了解其设置方式。

我已经解决了我的问题,但不是我预期的结果 - 好多了。

经过大量试验后,我了解了一些有关 WinRTXAML 图表的知识;这些观察纯粹是从编码的角度来看的,因为我没有在我的页面中使用 static XAML 。我是控件的新手,所以如果有人知道这些知识不完整或被误导,请补充:

  • 轴是根据添加的系列动态创建的,如果 适当的轴未预定义(在轴 属性 中)。这个 在数据绑定发生之前不会创建轴 (可以理解,因为图表需要反映数据类型 传入数据)。
  • 系列到轴的显式分配 是通过IndependentAxis和DependentRangeAxis实现的 系列对象。如果省略,将进行赋值 隐式基于系列绑定值的数据类型。 相反,如果一个轴明确分配给一个系列,则不需要 添加到图表上的轴 属性(但也可以)。
  • 如果一个轴被明确分配给一个与 该系列的数据类型,一个可怕的误导性异常是 产生。 “分配的独立轴不能使用。这可能是由于 到轴的未设置方向 属性。”
  • 类别轴是 为字符串类型的一系列值自动生成,而且 当数据类型与现有轴不匹配时。 (即数据类型 转换为字符串,则 CategoryAxis 为 produced/used)

将这些知识应用到我原来的问题上,这就是发生的事情。尽管我预定义了 DateTime 轴,但独立轴的传入数据类型是 DateTimeOffset。该值被解释为字符串值,因为它不是 DateTime(即没有隐式转换)。这导致图表生成一个类别轴,将其分配给系列,并将其放置在图表的顶部。 不明白这是怎么回事,我不想要这个顶轴上的标签,所以我试图抑制它们,但我找不到轴,因为它是在数据绑定发生之后才创建的。

SOLUTION:使 "taken" 值数据类型为 DateTime,这导致图表[显式或隐式]对齐到日期时间轴。优化:将轴直接分配给系列,不要费心将它们添加到 Chart.Axes 属性.

感谢@jstreet 和@FilipSkakun 花时间看这个,感谢您的关注和耐心。

-约翰