SciChart:自定义 RolloverModifierLabel,用于从代码绑定的多个数据系列



在我更新到最新版本的SciChart之前,我有这个自定义的翻转修饰符,它为我"翻转"的任何给定点显示多个值。 它是这样实现的:

<sci:RolloverModifier
DrawVerticalLine="True"
ShowTooltipOn="Always"
SourceMode="AllVisibleSeries"
TooltipLabelTemplate="{StaticResource RolloverLabelTemplate}" />

RolloverLabelTemplate 是一个 ControlTemplate:

<ControlTemplate
x:Key="RolloverLabelTemplate"
TargetType="sci:TemplatableControl">
<Grid>
...

现在,RolloverModifier.TooltipLabelTemplate已经从API中消失了,似乎被TooltipTemplate取代,TooltipTemplate采用DataTemplate,而不是ControlTemplate。我尝试制作一个类似的数据模板:

<DataTemplate
x:Key="SomeTemplate"
DataType="s:XySeriesInfo">
<Grid>

但是当我尝试将其分配给滚动修改器时,

<s:RolloverModifier
...
TooltipTemplate="{StaticResource SomeTemplate}" />

我得到以下异常:

无法强制转换类型的对象 "SciChart.Charting.ChartModifiers.RolloverModifier"键入 'SciChart.Charting.Visuals.RenderableSeries.BaseRenderableSeries'.

我尝试遵循以下文档:https://www.scichart.com/documentation/v4.x/webframe.html#RolloverModifier.html

关于设置工具提示模板样式的主题,它建议使用RolloverModifier,但要将TooltipTemplate添加到RenderableSeries:

<s:SciChartSurface.RenderableSeries>
<s:FastLineRenderableSeries s:RolloverModifier.TooltipTemplate="{StaticResource XyTooltipTemplate}"/>                              
</s:SciChartSurface.RenderableSeries>           
<s:SciChartSurface.ChartModifier>
<s:ModifierGroup>
<s:RolloverModifier ShowTooltipOn="Always" />                   
</s:ModifierGroup>
</s:SciChartSurface.ChartModifier>
</s:SciChartSurface>

这对我来说是一个问题,因为我没有在 xaml 中定义可渲染系列。它们绑定到视图模型:

<sciVisuals:SciChartSurface
...
SeriesSource="{Binding SciSeries}">

会不止一个,事实上我什至不知道有多少。在这种情况下,如何自定义鼠标经过工具提示标签?

在 SciChart WPF v4.x 或更高版本中,有必要将 TooltipTemplate 应用于系列,因为许多用户要求能够单独设置系列的样式。例如,蜡烛图系列应具有与线系列不同的工具提示。

请参阅 SciChart WPF 文档,了解如何在 v4+ 中应用 RolloverModifier TooltipTemplate:

设置工具提示项模板的样式

默认情况下,SciChart 具有许多特定于系列类型的工具提示模板。
若要更改工具提示模板,请使用 RolloverModifier.TooltipTemplate 附加属性:

<s:SciChartSurface >
<s:SciChartSurface.Resources>
<!-- Tooltip Template for an XyDataSeries binds to XySeriesInfo -->
<!-- Check out the properties on XySeriesInfo to see what you can bind to -->
<DataTemplate x:Key="XyTooltipTemplate" DataType="s:XySeriesInfo">
<StackPanel Orientation="Vertical">              
<TextBlock Foreground="White">
<Run Text="Series: "/>
<Run Text="{Binding SeriesName, StringFormat='{}{0}:'}"/>
</TextBlock>              
<TextBlock Foreground="White">
<Run Text="X-Value: "/>
<Run Text="{Binding FormattedXValue}"/>
</TextBlock>
<TextBlock Foreground="White">
<Run Text="Y-Value: "/>
<Run Text="{Binding FormattedYValue}"/>
</TextBlock>
</StackPanel>
</DataTemplate>
</s:SciChartSurface.Resources>
<s:SciChartSurface.RenderableSeries>
<s:FastLineRenderableSeries s:RolloverModifier.TooltipTemplate="{StaticResource XyTooltipTemplate}"/>                              
</s:SciChartSurface.RenderableSeries>           
<s:SciChartSurface.ChartModifier>
<s:ModifierGroup>
<s:RolloverModifier ShowTooltipOn="Always" />                   
</s:ModifierGroup>
</s:SciChartSurface.ChartModifier>
</s:SciChartSurface>

为了在使用 MVVM API 的情况下设置这些样式,我的建议是在 XAML 中创建样式并使用 SeriesBinding MVVM API 应用它们。

SciChart WPF 文档中有一个常见问题解答,介绍如何在使用 MVVM API 时设置工具提示的样式。

许多客户询问我们如何在 MVVM API 中设置在 SciChart 中使用的各种附加属性的样式。例如,给定的以下附加属性,我们如何将其转换为 MVVM API?

解决方案很简单,使用我们在工作示例中介绍的样式化可渲染系列的方法 - 在 MVVM 中设置系列的样式。

只需在视图中以样式声明附加的属性和工具提示模板即可。

现在,使用 BaseRenderableSeriesViewModel.StyleKey 属性应用样式。SciChart将选择样式并完成其余的工作。

如果您仍在使用较旧的 SeriesSource API(请注意,从 v4.x 开始现已过时),那么我建议在 XAML 中声明您的样式,并使用此技术应用它来访问代码隐藏中的样式。

最新更新