我想從WPF工具包(使用LineSeries)使用圖表,我根本不需要圖例。我需要這個,因爲我有10個這樣的圖表,每個都有來自不同來源的數據,我想爲所有10個圖畫一個圖例,以節省屏幕的空間。隱藏多個數據系列的WPF工具包圖表的圖例
默認情況下,圖例在添加第二個LineSeries時出現。有什麼辦法可以防止它出現?
謝謝,
雪碧。
我想從WPF工具包(使用LineSeries)使用圖表,我根本不需要圖例。我需要這個,因爲我有10個這樣的圖表,每個都有來自不同來源的數據,我想爲所有10個圖畫一個圖例,以節省屏幕的空間。隱藏多個數據系列的WPF工具包圖表的圖例
默認情況下,圖例在添加第二個LineSeries時出現。有什麼辦法可以防止它出現?
謝謝,
雪碧。
似乎沒有一種特別乾淨的方法。一個簡單的方法是設置Legend的寬度用零LegendStyle:
<charting:Chart>
<charting:Chart.LegendStyle>
<Style TargetType="datavis:Legend">
<Setter Property="Width" Value="0" />
</Style>
</charting:Chart.LegendStyle>
一個更激進的辦法是更換一個的ControlTemplate中不包括一個傳說:
<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>
使用下面的命名空間:
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"
感謝Quarermeister。我採取了第二種方法。我只是自己發表了答案,但是你救了我麻煩。我還用它將繪圖區域周圍的邊緣和標題減至最小,以便儘可能將所有圖表放在一起。 – sprite 2010-08-30 07:52:44
嘿。你能否澄清一下:什麼是datavis命名空間? – 2012-04-16 08:06:06
我試圖Quarermeister的做法,但他在,我沒有足夠的屬性的TargetType爲「datavis」程序集的引用。
<chartingToolkit:Chart.LegendStyle>
<Style TargetType="Control">
<Setter Property="Width" Value="0" />
<Setter Property="Height" Value="0" />
</Style>
</chartingToolkit:Chart.LegendStyle>
我也不得不填充添加到圖表的右側,因爲如果沒有圖例,我的x軸間隔標籤被延伸的圖表區域之外。
你有它,你只需要添加命名空間:xmlns:datavis =「clr-namespace:System.Windows.Controls.DataVisualization; assembly = System.Windows.Controls.DataVisualization.Toolkit」 – codekaizen 2011-09-16 07:59:26
更明智的做法......
<charting:LineSeries.LegendItemStyle >
<Style TargetType="{x:Type charting:LegendItem}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</charting:LineSeries.LegendItemStyle>
對我來說比設定值更好地工作至0 ... 乾杯!
我同意這看起來像一個更明智的方法,但我有幾個問題。首先,上述方法只會摺疊這些項目,所以Legend框仍然顯示出來。 (通過將樣式應用於圖表來修復,請注意Legend類位於與圖表不同的名稱空間中)。然後我碰到了第二個問題:Collapsed似乎在設計模式下立即工作,但在刷新後(例如構建項目)以及運行應用程序時,圖例顯示出來。因此最後我不得不添加一個寬度= 0的setter也:( – Ben 2014-12-28 13:57:53
附加屬性的乾燥,容易使用:
<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
}
我使用WPF工具包的2010年2月發佈。 – sprite 2010-08-29 15:01:35