2010-08-29 48 views
19

Tôi đang cố gắng sử dụng biểu đồ từ Bộ công cụ WPF (với LineSeries) và tôi không muốn một huyền thoại nào cả. Tôi cần điều này vì tôi có 10 bảng xếp hạng như vậy với mỗi dữ liệu từ một nguồn khác nhau và tôi muốn vẽ một huyền thoại cho tất cả 10, để tiết kiệm màn hình bất động sản.Ẩn chú giải biểu đồ Bộ công cụ WPF với nhiều hơn một chuỗi dữ liệu

Theo mặc định chú giải sẽ xuất hiện khi bạn thêm Dòng thứ hai. Có cách nào để ngăn nó xuất hiện không?

Xin cảm ơn,

sprite.

+0

Tôi đang sử dụng phiên bản tháng 2 năm 2010 của WPF Toolkit. – sprite

Trả lời

43

Dường như không có cách nào đặc biệt rõ ràng. Một phương pháp đơn giản là để thiết lập Width của Truyền thuyết về không sử dụng LegendStyle:

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

Một cách tiếp cận mạnh mẽ hơn là để thay thế các ControlTemplate với một trong đó không bao gồm một Legend:

<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> 

Sử dụng sau namespace:

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" 
+1

Cảm ơn Quarermeister. Tôi đã tiếp cận thứ hai. Tôi chỉ tự mình đăng câu trả lời, nhưng bạn đã cứu tôi. Tôi cũng sử dụng nó để giảm thiểu các lề xung quanh khu vực cốt truyện và tiêu đề đến mức tối thiểu để tôi có thể xếp tất cả các biểu đồ của tôi lại với nhau trong không gian nhỏ nhất có thể. – sprite

+3

này. Bạn có thể làm rõ: không gian tên datavis là gì? –

8

Tôi đã thử phương pháp tiếp cận của Quarermeister nhưng có tham chiếu đến tập hợp "datavis" trong thuộc tính TargetType mà tôi không có.

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

Tôi cũng phải thêm đệm vào bên phải biểu đồ vì không có chú thích, nhãn khoảng thời gian x trục của tôi đang mở rộng ra ngoài khu vực biểu đồ.

+3

Bạn có nó, bạn chỉ cần thêm không gian tên: xmlns: datavis = "clr-namespace: System.Windows.Controls.DataVisualization; assembly = System.Windows.Controls.DataVisualization.Toolkit" – codekaizen

9

cách tiếp cận nhiều hợp lý hơn ...

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

Làm việc tốt hơn cho tôi hơn giá trị thiết lập để 0 ... Cheers!

+1

Tôi đồng ý rằng điều này có vẻ như một cách tiếp cận hợp lý hơn, nhưng tôi có một vài vấn đề. Đầu tiên cách tiếp cận trên chỉ sụp đổ các mục và vì vậy hộp Legend vẫn hiển thị. (Cố định bằng cách áp dụng kiểu cho biểu đồ để thay thế, lưu ý lớp Legend nằm trong một không gian tên khác để biểu đồ). Sau đó, tôi chạy vào vấn đề thứ hai: Collapsed dường như hoạt động ngay lập tức trong chế độ thiết kế nhưng sau khi làm mới (ví dụ như xây dựng dự án) và khi chạy ứng dụng, chú giải xuất hiện. Vì vậy, cuối cùng tôi đã phải thêm một setter width = 0 quá: ( – Ben

5

đính kèm tài sản cho khô, dễ sử dụng:

<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 
    } 
Các vấn đề liên quan