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

时间:2017-01-29 22:30:30

标签: xaml charts uwp uwp-xaml winrt-xaml-toolkit

我正在使用 WinRTXamlToolkit.Controls.DataVisualization.Charting.Chart 对象,其依赖轴整数为0/1,并且是一个独立的时间轴。 我想抑制或者旋转图表顶部的标签。 是在Axis(chart.Axes)还是系列(LineSeries)上找到样式? 我的图表完全通过以下代码填写:

EDIT 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>

EDIT 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);
}

我试图控制的区域为绿色: Sample Line Chart

我已经使用了其他一些样式,例如间隔和轴标题,我只是无法弄清楚数据点标签样式的位置?

编辑1/30/2017: 这是树,突出显示的对象(底部是TextBlock)。我需要弄清楚如何设计这个&#34; AxisLabel&#34;,&#34; Panel&#34;,&#34; AxisGrid&#34;或&#34; CategoryAxis&#34; - 通过代码。 enter image description here

任何提示都将不胜感激!

-John

2 个答案:

答案 0 :(得分:0)

不是一个完整的答案,因为我无法告诉您如何制作标签以显示在顶部,但在我看来,它们更像是数据点标签而不是轴标签。运行工具包的示例应用程序可能会帮助您稍微浏览UI树并使其更容易探索。只需在VS中获取工具箱的源代码,点击F5,打开Chart控件示例,然后在指向标签的同时按Ctrl + Shift。这是我在指向类别轴时得到的结果:

enter image description here

我会围绕数据点,系列搜索并搜索名为style的属性。否则 - 浏览源代码以找到它的设置方式。

答案 1 :(得分:0)

我已经解决了我的问题,但没有达到我预期的结果 - 更好。

经过不少实验,我已经了解了WinRTXAML图表的一些内容;这些观察来自纯粹的编码视角,因为我在页面中没有使用静态XAML。我是控制人员的新手,所以如果有人知道这些学习不完整或被误导,请加入:

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

将这些学习应用到我原来的问题中,这里发生了什么。虽然我预定了一个DateTime轴,但我的独立轴的传入数据类型是DateTimeOffset。该值被解释为字符串值,因为它不是DateTime(即没有隐式转换)。这导致Chart生成CategoryAxis,将其分配给系列,并将其放置在图表的顶部。 不理解这种情况发生了,我不想在这个顶轴上贴标签,所以我试图压制它们,但我找不到轴,因为它直到AFTER数据绑定发生才创建。

解决方案:使&#34;采取&#34;值数据类型 DateTime ,这导致图表[显式或隐式]与DateTimeAxis对齐。优化:将轴直接指定给系列,不要将它们添加到Chart.Axes属性中。

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

-John