我正在尝试使用RolloverModifier
(结合DataTemplate
的{{1}}属性自定义SciChart折线图上显示的TooltipTemplate
工具提示的外观,但无法弄清楚。
这是我的RolloverModifier
,我尽可能简单地使其工作。
DataTemplate
到目前为止我尝试过的事情:
首先:
<DataTemplate x:Key="ChartToolTipTemplate" DataType="{x:Type s:SeriesInfo}">
<TextBlock Text="Hello" />
</DataTemplate>
但是我收到了错误:
无法投射类型&#39; SciChart.Charting.ChartModifiers.RolloverModifier&#39;输入&#39; SciChart.Charting.Visuals.RenderableSeries.BaseRenderableSeries&#39;。
从网上研究看,我应该做的是:
<s:RolloverModifier x:Name="RolloverModifier" TooltipTemplate="{StaticResource ChartToolTipTemplate}">
然而,这对我来说并不好,因为我的<s:SciChartSurface.RenderableSeries>
<s:FastLineRenderableSeries s:TooltipModifier.TooltipTemplate="{StaticResource TooltipTemplate}"
s:TooltipModifier.IncludeSeries="True"
s:SeriesValueModifier.IncludeSeries="False"/>
</s:SciChartSurface.RenderableSeries>
已绑定到我的ViewModel中的RenderableSeries
。
ObservableCollection<IRenderableSeries>
对此类似问题的建议是使用<s:SciChartSurface
x:Name="SciChart"
Grid.Column="0"
Annotations="{Binding Annotations}"
GridLinesPanelStyle="{StaticResource GridLinesPanelStyle}"
RenderableSeries="{Binding ChartSeries}"
Style="{StaticResource SurfaceStyle}">
并根据文档中的此页面设置ViewModel中的样式:Bind Tooltip Templates or Attached Properties in MVVM,但我无法弄清楚如何将我的ObservableCollection<IRenderableSeriesViewModel>
转换为IRenderableSeries
,最后得到一张空白图表。
这个类似问题的另一个建议(SciChart: Custom RolloverModifierLabel for multiple DataSeries bound from code是使用隐式样式,所以我添加了
LineRenderableSeriesViewModel
保持
<s:SciChartSurface.Resources>
<Style TargetType="s:BaseRenderableSeries">
<Setter Property="s:RolloverModifier.TooltipTemplate" Value="{StaticResource ChartToolTipTemplate}" />
<Setter Property="s:RolloverModifier.IncludeSeries" Value="True" />
<Setter Property="s:RolloverModifier.IsEnabled" Value="True" />
<Setter Property="FontSize" Value="30" />
</Style>
</s:SciChartSurface.Resources>
但是样式对工具提示完全没有影响(甚至是我刚刚放入的 <s:SciChartSurface.ChartModifier>
<s:ModifierGroup>
<s:LegendModifier
x:Name="LegendModifier"
Margin="10"
HorizontalAlignment="Right"
LegendTemplate="{StaticResource LegendTemplate}"
Orientation="Horizontal"
ShowLegend="{Binding ShowLegend}"
ShowVisibilityCheckboxes="False" />
<s:RolloverModifier x:Name="RolloverModifier" />
<s:SeriesSelectionModifier>
<s:SeriesSelectionModifier.SelectedSeriesStyle>
<Style TargetType="s:BaseRenderableSeries">
<Setter Property="Stroke" Value="DeepPink" />
<Setter Property="StrokeThickness" Value="3" />
</Style>
</s:SeriesSelectionModifier.SelectedSeriesStyle>
</s:SeriesSelectionModifier>
</s:ModifierGroup>
</s:SciChartSurface.ChartModifier>
位来检查它是否正常工作)。删除该行会完全删除工具提示。
答案 0 :(得分:1)
我已经为你做了一些挖掘,因为这个问题被问了很多。
基本上问题是在SciChart WPF库中,BaseRenderableSeries和FastLineRenderableSeries已经有一个默认样式(没有x:键的样式),所以要隐式覆盖它,你必须设置类型等于系列类型。覆盖基础不起作用。
以下代码确实有效。放置在Window.Resources中,它将红色笔触和笔触粗细应用于FastLineRenderableSeries中的所有SciChartSurface:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="http://schemas.abtsoftware.co.uk/scichart"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="{x:Type FastLineRenderableSeries}">
<Setter Property="Stroke" Value="#FF3333"/>
<Setter Property="StrokeThickness" Value="5"/>
</Style>
</Window.Resources>
<Grid>
<s:SciChartSurface>
<s:SciChartSurface.RenderableSeries>
<s:FastLineRenderableSeries x:Name="lineSeries"/>
</s:SciChartSurface.RenderableSeries>
<s:SciChartSurface.XAxis>
<s:NumericAxis/>
</s:SciChartSurface.XAxis>
<s:SciChartSurface.YAxis>
<s:NumericAxis/>
</s:SciChartSurface.YAxis>
</s:SciChartSurface>
</Grid>
</Window>
您需要为要为其设置默认工具提示的所有系列类型添加样式,并且此样式将全部应用于它们。
答案 1 :(得分:0)
我最终得到了MVVM方法。根据mm8的评论,我已经绑定到ObservableCollection<IRenderableSeriesViewModel>
,但我试图将ObservableCollection<IRenderableSeries>
复制到它,所以我将其改为仅从头开始构建前者。
return new LineRenderableSeriesViewModel()
{
DataSeries = dataSeries,
Stroke = stroke,
StrokeThickness = 2,
StyleKey = "ChartTooltipStyle",
AntiAliasing = true
};
然后在XAML ......
(部分感谢SciChart,此页面:WPF Chart Custom Tooltip Template Example)
<UserControl.Resources>
<!-- etc. etc. -->
<DropShadowEffect x:Key="DropShadowEffect" BlurRadius="5" Direction="-45" ShadowDepth="6" Color="{StaticResource MyBlack}"></DropShadowEffect>
<DataTemplate x:Key="ChartToolTipTemplate" DataType="{x:Type s:SeriesInfo}">
<Border Padding="4, 2, 4, 1"
Margin="4, 0, 0, 2"
BorderThickness="0"
CornerRadius="0"
Effect="{StaticResource DropShadowEffect}">
<Border.Background>
<SolidColorBrush Color="{Binding Stroke}" />
</Border.Background>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}: {1:0.00}">
<Binding Path="SeriesName" />
<Binding Path="Value" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Border>
</DataTemplate>
<Style x:Key="ChartToolTipContainerStyle" TargetType="s:TooltipControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="s:TooltipControl">
<ContentPresenter Content="{TemplateBinding DataContext}" ContentTemplate="{TemplateBinding ContentTemplate}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="s:FastLineRenderableSeries" x:Key="ChartTooltipStyle">
<Setter Property="s:RolloverModifier.TooltipTemplate" Value="{StaticResource ChartToolTipTemplate}" />
<Setter Property="s:RolloverModifier.TooltipContainerStyle" Value="{StaticResource ChartToolTipContainerStyle}" />
<Setter Property="s:RolloverModifier.IncludeSeries" Value="True" />
<Setter Property="s:SeriesValueModifier.IncludeSeries" Value="False" />
</Style>
</UserControl.Resources>