wpf charts customization wpftoolkit

Ocultar la leyenda del gráfico de WPF Toolkit con más de una serie de datos



charts customization (4)

Estoy intentando usar gráficos del kit de herramientas de WPF (con LineSeries) y no quiero una leyenda en absoluto. Necesito esto, ya que tengo 10 de estos gráficos, cada uno con datos de una fuente diferente, y me gustaría dibujar una leyenda para los 10, para guardar el espacio en pantalla.

Por defecto, la leyenda aparece en el momento en que agrega un segundo LineSeries. ¿Hay alguna manera de evitar que aparezca?

Gracias,

duende.


Intenté el enfoque de Quarermeister, pero tiene una referencia a un conjunto "datavis" en el atributo TargetType que no tenía.

<chartingToolkit:Chart.LegendStyle> <Style TargetType="Control"> <Setter Property="Width" Value="0" /> <Setter Property="Height" Value="0" /> </Style> </chartingToolkit:Chart.LegendStyle>

También tuve que agregar relleno al lado derecho del gráfico porque sin la leyenda, mis etiquetas de intervalo del eje x se extendían fuera del área del gráfico.


No parece haber una forma especialmente limpia. Un enfoque simple es establecer el Ancho de la Leyenda en cero usando LegendStyle:

<charting:Chart> <charting:Chart.LegendStyle> <Style TargetType="datavis:Legend"> <Setter Property="Width" Value="0" /> </Style> </charting:Chart.LegendStyle>

Un enfoque más drástico es reemplazar la plantilla ControlTemplate con una que no incluya una leyenda:

<charting:Chart> <charting:Chart.Template> <ControlTemplate TargetType="{x:Type charting:Chart}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <datavis:Title Content="{TemplateBinding Title}" Style="{TemplateBinding TitleStyle}" /> <chartingprimitives:EdgePanel Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}" Grid.Row="1" Margin="0,15,0,15"> <Grid Panel.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" /> <Border Panel.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" /> </chartingprimitives:EdgePanel> </Grid> </Border> </ControlTemplate> </charting:Chart.Template>

Utilice los siguientes espacios de nombres:

xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:chartingprimitives="clr-namespace:System.Windows.Controls.DataVisualization.Charting.Primitives;assembly=System.Windows.Controls.DataVisualization.Toolkit"


Propiedad adjunta para uso en seco, fácil:

<charting:Chart helpers:ChartHelpers.IsLegendHidden="True" ...

public static class ChartHelpers { static ChartHelpers() { HideLegendStyle = new Style(typeof(Legend)); HideLegendStyle.Setters.Add(new Setter(Legend.WidthProperty, 0.0)); HideLegendStyle.Setters.Add(new Setter(Legend.HeightProperty, 0.0)); HideLegendStyle.Setters.Add(new Setter(Legend.VisibilityProperty, Visibility.Collapsed)); } /// <summary>Gets a <see cref="Style"/> to hide the legend.</summary> public static readonly Style HideLegendStyle; #region IsLegendHidden [Category("Common")] [AttachedPropertyBrowsableForType(typeof(Chart))] public static bool GetIsLegendHidden(Chart chart) { return (bool)chart.GetValue(IsLegendHiddenProperty); } public static void SetIsLegendHidden(Chart chart, bool value) { chart.SetValue(IsLegendHiddenProperty, value); } public static readonly DependencyProperty IsLegendHiddenProperty = DependencyProperty.RegisterAttached( "IsLegendHidden", typeof(bool), // type typeof(ChartHelpers), // containing static class new PropertyMetadata(default(bool), OnIsLegendHiddenChanged) ); private static void OnIsLegendHiddenChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { OnIsLegendHiddenChanged((Chart)d, (bool)e.NewValue); } private static void OnIsLegendHiddenChanged(Chart chart, bool isHidden) { if (isHidden) { chart.LegendStyle = HideLegendStyle; } } #endregion IsLegendHidden }


Un enfoque mucho más sensible ...

<charting:LineSeries.LegendItemStyle > <Style TargetType="{x:Type charting:LegendItem}"> <Setter Property="Visibility" Value="Collapsed"/> </Style> </charting:LineSeries.LegendItemStyle>

Funcionó mejor para mí que establecer valores en 0 ... ¡Salud!