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

WinRTXAML图表,顶部标签的控件样式,代码,xaml,charts,uwp,uwp-xaml,winrt-xaml-toolkit,Xaml,Charts,Uwp,Uwp Xaml,Winrt Xaml Toolkit,我使用的是WinRTXamlToolkit.Controls.DataVisualization.Charting.Chart对象,其依赖轴整数为0/1,时间轴独立。 我想抑制或旋转图表顶部的标签。 轴图表上有样式吗?轴系列还是线系列? 我的图表完全通过以下代码片段进行配置: 编辑2017年1月30日-3:添加托管XAML页面 <Page x:Class="HomeControl.Views.Historical" xmlns="http://schemas.microso

我使用的是WinRTXamlToolkit.Controls.DataVisualization.Charting.Chart对象,其依赖轴整数为0/1,时间轴独立。 我想抑制或旋转图表顶部的标签。 轴图表上有样式吗?轴系列还是线系列? 我的图表完全通过以下代码片段进行配置:

编辑2017年1月30日-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>
我试图控制的区域为绿色:

我已经使用了一些其他样式,例如间隔和轴标题,我只是不知道数据点标签样式在哪里

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

任何提示都将不胜感激


-John

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


我会在数据点、序列周围搜索一个名为style的属性。否则,请浏览源代码以了解其设置方式。

我已经解决了我的问题,但并没有达到我预期的结果-要好得多

经过一段时间的实验,我学到了一些关于WinRTXAML图表的东西;这些观察纯粹是从编码的角度来看的,因为我在页面中没有使用静态XAML。我是控制组的新手,因此如果有人知道这些学习不完整或被误导,请插话:

轴是基于要添加的系列动态创建的,如果 在“轴”属性中未预定义相应的轴。这 在数据绑定发生之前,不会创建轴 可以理解,因为图表需要反映数据类型 输入数据的类型。 将级数显式赋值给轴 通过系统的独立轴和从属轴实现 系列对象。如果省略此项,将进行分配 隐式地基于序列绑定值的数据类型。 相反,如果轴明确指定给系列,则不需要 已添加到图表上的“轴”属性,但也可以添加。 如果将轴显式指定给与 在该系列的数据类型中,一个可怕的误导性异常是 生成。无法使用指定的独立轴。这可能是应得的 设置轴的未设置方向属性。 分类是 自动为字符串类型的系列值生成,但 当数据类型与现有轴不匹配时。即数据类型 转换为字符串,然后生成/使用CategoryAxis 将这些经验应用到我的原始版本中,下面是发生的情况。虽然我预定义了一个日期时间轴,但我的独立轴的传入数据类型是DateTimeOffset。此值被解释为字符串值,因为它不是DateTime,即没有隐式转换。这导致图表生成一个CategoryAxis,将其分配给系列,并将其置于图表顶部。 我不明白这是怎么回事,我不想把标签放在这个顶轴上,所以我试图抑制它们,但我找不到这个轴,因为它是在数据绑定发生后才创建的

解决方案:将取值数据类型设为DateTime,这导致图表[显式或隐式]与DateTimeAxis对齐。优化:将轴直接指定给系列,不用麻烦将它们添加到图表中。Axes属性

感谢@jstreet和@FilipSkakun花时间看这篇文章,我感谢你的关注和耐心


-John

您必须设置DateTimeAxis的AxisLabelStyle属性。但请记住:这是XAML工具包,您应该在。。。嗯,XAML…谢谢jstreet,但不幸的是,这是我尝试AxisLabelStyle的第一个样式,它只影响底部轴,8:15,8:20,等等。标签,而不是顶部。你把样式分配给顶部轴了吗?嗨jstreet。我编辑了我的帖子,添加了一个可视化的树。我认为设置顶轴的样式是我问题的核心,您对如何以编程方式实现这一点有什么指导吗?鉴于您提到顶轴对您来说是意外的,我认为您可能希望找到一种方法来删除它,而不是设置样式。但无论如何,您都应该发布生成该图表的完整代码。人们可以自己获取可视化树的图片,但无法获取您的代码。最后,如果您还没有完成,请阅读。谢谢Filip,是的,我已经研究了可视化树,我已经编辑了输出
原始的文章,包括它作为您的参考。我需要关于如何通过代码设置CategoryAxis>AxisGrid>Panel>AxisLabel>TextBlock样式的指导。CategoryAxis对我来说是意外的,我没有明确地添加它。我看到你在那里添加了一个DateTimeAxis,我想这不会删除已经存在的CategoryAxis。关于这一点,我必须同意jstreet的意见。尝试创建一组尽可能小的代码文件,以便在添加到新的应用程序项目时重现您的问题。
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);
}