我想从我的 Silverlight 图表中的 LineSeries 中删除数据点标记。我在网上找到的唯一方法是将 VisibilityProperty 设置为 Collapse。
//在当前的 SL 工具包版本中不起作用 var collapseDataPointSetter = new Setter(Control.VisibilityProperty, Visibility.Collapsed);
但这不适用于当前版本的 SL 工具包。如何在当前版本中删除或隐藏数据点标记?
我想从我的 Silverlight 图表中的 LineSeries 中删除数据点标记。我在网上找到的唯一方法是将 VisibilityProperty 设置为 Collapse。
//在当前的 SL 工具包版本中不起作用 var collapseDataPointSetter = new Setter(Control.VisibilityProperty, Visibility.Collapsed);
但这不适用于当前版本的 SL 工具包。如何在当前版本中删除或隐藏数据点标记?
潘塔黑伊,
使用以下图表样式(带有引用的模板)隐藏数据点。我已经包含了 LineSeries 和 AreaSeries 的样式。
祝你好运,吉姆
<ControlTemplate x:Key="CommonAreaSeriesDataPointTemplate" TargetType="charting:AreaDataPoint">
<!--Comment out data points from the default template; just an empty template-->
<Grid x:Name="Root" Opacity="1">
<!--<ToolTipService.ToolTip>
<StackPanel Margin="2,2,2,2">
<ContentControl Content="{TemplateBinding FormattedDependentValue}" />
<ContentControl Content="{TemplateBinding FormattedIndependentValue}" />
</StackPanel>
</ToolTipService.ToolTip>
<Ellipse StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}" Fill="{TemplateBinding Background}" />-->
</Grid>
</ControlTemplate>
<Style x:Key="CommonAreaSeriesDataPoint" TargetType="charting:AreaDataPoint">
<Setter Property="Background" Value="{StaticResource CommonAreaSeriesBackground}" />
<Setter Property="Template" Value="{StaticResource CommonAreaSeriesDataPointTemplate}" />
</Style>
<Style x:Key="CommonAreaSeriesPath" TargetType="Path">
<Setter Property="StrokeThickness" Value="1" />
<Setter Property="Stroke" Value="DarkGray" />
<Setter Property="Effect" Value="{StaticResource DialogDropShadow}" />
</Style>
<ControlTemplate x:Key="CommonLineSeriesDataPointTemplate" TargetType="charting:LineDataPoint">
<!--Comment out data points from the default template; just an empty template-->
<Grid x:Name="Root" Opacity="1">
<!--<ToolTipService.ToolTip>
<StackPanel Margin="2,2,2,2">
<ContentControl Content="{TemplateBinding FormattedDependentValue}" />
<ContentControl Content="{TemplateBinding FormattedIndependentValue}" />-->
<!--Example of how to access the bound business object-->
<!--<ContentControl Content="{Binding Amount}" DataContext="{TemplateBinding DataContext}" />-->
<!--</StackPanel>
</ToolTipService.ToolTip>-->
<!--<Ellipse StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}" Fill="{TemplateBinding Background}" />-->
</Grid>
</ControlTemplate>
<Style x:Key="CommonLineSeriesDataPoint" TargetType="charting:LineDataPoint">
<Setter Property="IndependentValueStringFormat" Value="{}{0:yyyy}" />
<Setter Property="DependentValueStringFormat" Value="{}{0:c0}" />
<Setter Property="Background" Value="#FF0077CC" />
<Setter Property="BorderBrush" Value="White" />
<Setter Property="BorderThickness" Value="2" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template" Value="{StaticResource CommonLineSeriesDataPointTemplate}" />
</Style>
<Style x:Key="CommonLineSeriesPolyline" TargetType="Polyline">
<Setter Property="StrokeThickness" Value="5" />
<Setter Property="Effect" Value="{StaticResource DialogDropShadow}" />
</Style>
<!-- Implicit non-Key'd Styles BasedOn Common Explicit Key'd Styles above -->
<Style TargetType="charting:AreaSeries">
<Setter Property="DataPointStyle" Value="{StaticResource CommonAreaSeriesDataPoint}" />
<Setter Property="PathStyle" Value="{StaticResource CommonAreaSeriesPath}" />
</Style>
<Style TargetType="charting:LineSeries">
<Setter Property="DataPointStyle" Value="{StaticResource CommonLineSeriesDataPoint}" />
<Setter Property="PolylineStyle" Value="{StaticResource CommonLineSeriesPolyline}" />
</Style>
在我看来,用样式来做这件事并不是最好的方法,因为当你还有很多像股票图表一样的数据点时,你仍然有大量的视觉效果。
public class LineSeriesEx : LineSeries
{
protected override DataPoint CreateDataPoint()
{
return new EmptyDataPoint();
}
}
public class EmptyDataPoint : DataPoint
{
// As the method name says, this DataPoint is empty.
}
这样做,您的视觉效果几乎比您设置一些样式时少五倍。
我使用了 Jim 的解决方案(顺便说一句,非常感谢,那里有巨大的帮助)并将其应用于默认图表模板。
在调色板区域中,您拥有系列中每一行的资源字典。
以下是我如何使用 Jim 的控件模板摆脱它,我可以将它放在每个 ResourceDictonary 中,因此我不必逐行执行
<toolkit:ResourceDictionaryCollection>
<ResourceDictionary>
<!-- I wanted a solid color brush so I just went ahead and defined it in the palette-->
<SolidColorBrush x:Key="Background" Color="Green"/>
<Style x:Key="DataPointStyle" TargetType="Control">
<Setter Property="Background" Value="{StaticResource Background}"/>
<!-- below is where I entered Jim's control template into the default palette defined-->
<Setter Property="Template">
<ControlTemplate TargetType="charting:LineDataPoint">
<Grid x:Name="Root" Opacity="1"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</toolkit:ResourceDictionaryCollection>
这至少对我有用,它会为我节省很多时间(并且在我拔掉头发之前已经节省了很多头发)
<charting:LineSeries.DataPointStyle>
<Style TargetType="charting:LineDataPoint">
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="Background" Value="violet"/>
<Setter Property="Opacity" Value="0" />
</Style>
</charting:LineSeries.DataPointStyle>