0

WPF で Button から派生するカスタム コントロールを作成しました。DefaultStyleKeyProperty をオーバーライドしてから、Content の依存関係プロパティを設定しました。このコントロールには、OnMouseEnter、OnMouseLeave、OnMouseDown、および OnMouseUp の独自のスタイルがあります。使用すると、イベントとカスタマイズされたスタイルが表示されますが、コンテンツは表示されません。コンテンツを設定するにはどうすればよいですか?

コントロールのコードは次のとおりです。

public class SymbolButton : Button
    {
        public static readonly DependencyProperty ContentProperty;
        static SymbolButton()
        {
           DefaultStyleKeyProperty.OverrideMetadata(typeof(SymbolButton), new FrameworkPropertyMetadata(typeof(SymbolButton)));
           FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();
           metadata.AffectsArrange = true;
           ContentProperty = DependencyProperty.Register("Content",
                            typeof(string), typeof(SymbolButton), new UIPropertyMetadata(null));

        }
        Point startPoint = new Point(0.5, 0);
        Point endPoint = new Point(0.5, 1);
        public string Content
        {
            get { return (string)GetValue(ContentProperty); }
            set { SetValue(ContentProperty, value); }
        }

        public SymbolButton()
        {
            //this.Content = "Symbol";
            ButtonDefaultDisplay();
            this.BorderThickness = new Thickness(3.3);
            this.FontSize = 21;
            this.FontStyle = FontStyles.Oblique;
        }

        private void ButtonDefaultDisplay()
        {
            this.Foreground = Brushes.BlueViolet;
            this.Background = new LinearGradientBrush(Colors.LightBlue,
                                                        Colors.MediumAquamarine,
                                                        startPoint, endPoint);
            this.BorderBrush = Brushes.DarkTurquoise;
        }

        private void ButtonClickDisplay()
        {
            this.Foreground = Brushes.LightCyan;
            this.Background = new LinearGradientBrush(Colors.MidnightBlue,
                                                       Colors.DarkTurquoise,
                                                       startPoint, endPoint);
            this.BorderBrush = Brushes.Cyan;
        }

        private void ButtonHighlight()
        {
            this.Foreground = Brushes.Red;
            this.Background = new LinearGradientBrush(Colors.MistyRose,
                                                       Colors.LightBlue,
                                                       endPoint, startPoint);
            this.BorderBrush = Brushes.Plum;
        }

        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            ButtonClickDisplay();
        }

        protected override void OnMouseUp(MouseButtonEventArgs e)
        {
            ButtonHighlight();
        }

        protected override void OnMouseEnter(MouseEventArgs e)
        {
            ButtonHighlight();
        }

        protected override void OnMouseLeave(MouseEventArgs e)
        {
            ButtonDefaultDisplay();
        }
    }
4

0 に答える 0