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 花时间看这个,感谢您的关注和耐心。
-约翰
我正在使用 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 花时间看这个,感谢您的关注和耐心。
-约翰