複数のデータ系列を持つWPF Toolkitチャートの凡例を非表示にします

charts customization wpf wpftoolkit
複数のデータ系列を持つWPF Toolkitチャートの凡例を非表示にします

WPF Toolkit(LineSeriesを使用)のチャートを使用しようとしていますが、凡例はまったく必要ありません。 それぞれ異なるソースからのデータを含む10個のこのようなグラフがあり、画面のスペースを節約するために10個すべてに1つの凡例を描画したいので、これが必要です。

デフォルトでは、2番目のLineSeriesを追加するとすぐに凡例が表示されます。 表示されないようにする方法はありますか?

ありがとう、

スプライト。

  20  9


ベストアンサー

特にきれいな方法はないようです。 1つの簡単なアプローチは、LegendStyleを使用してLegendの幅をゼロに設定することです。

より抜本的なアプローチは、ControlTemplateをLegendを含まないものに置き換えることです。

次の名前空間を使用します。

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"

46


より賢明なアプローチ…​

値を0に設定するよりもうまく機能しました…​ 乾杯!

10


Quarermeisterのアプローチを試しましたが、彼はTargetType属性に「datavis」アセンブリへの参照を持っていますが、これは私にはありませんでした。

また、凡例がないと、x軸の間隔ラベルがチャート領域の外側に伸びていたため、チャートの右側にパディングを追加する必要がありました。

9


DRYの添付プロパティ、簡単な使用法:

` `

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));
        }

        /// Gets a  to hide the legend.
        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
    }

5


タイトルとURLをコピーしました