c#システムコントロールの依存関係プロパティをオーバーライドする

こんにちは私はstackoverflowの関連する質問のいくつかを読んだが、まだ私の質問を解決する方法を見つけることができません:

GroupBoxと同じCheckableGroupBoxコントロールを作成する必要がありますが、ヘッダーにチェックボックスがあります。そしてそれは次の要件を持っています:

  1. 元のGroupBoxにはObject型のHeaderプロパティがありますが、CheckableGroupBoxのこのプロパティを文字列のみに制限する必要があります。

私はこれらの提案を提供するために以下のコードを書いた:

public class CheckableGroupBox : System.Windows.Controls.GroupBox
{
    //override the default header property
    private static void OnHeaderChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        CheckableGroupBox me = o as CheckableGroupBox;
        me.labHeader.Content = e.NewValue.ToString();        
    }

    public CheckableGroupBox() : base()
    {
        //setup the header of the group box

        //create the stack panel, add the checkbox and the label
        System.Windows.Controls.StackPanel sp = new System.Windows.Controls.StackPanel();
        sp.Orientation = System.Windows.Controls.Orientation.Horizontal;
        this.chkHeader = new System.Windows.Controls.CheckBox();
        sp.Children.Add(this.chkHeader);
        sp.Children.Add(this.labHeader);

        //set the header to be the stack panel.
        this.Header = sp;

        //override the default HeaderProperty
        CheckableGroupBox.HeaderProperty.OverrideMetadata(
            typeof(object), 
            new PropertyMetadata("", OnHeaderChangedCallback)
            );
    }

}

ただし、コードは機能しません。 CheckableGroupBoxを(デザインビューで)ウィンドウに追加すると、次のプロンプトが表示されます。

"CheckableGroupBox"のインスタンスを作成できません。オブジェクトの型はDependencyObjectから派生する必要があります。

何か案は?

1

2 答え

あなたは以下を使用するべきです:

   System.Windows.Controls.GroupBox.HeaderProperty.OverrideMetadata(
            typeof(CheckableGroupBox), 
            new PropertyMetadata("", OnHeaderChangedCallback)
            );
1
追加された
[CommonDependencyProperty]
public static readonly DependencyProperty FontSizeProperty = TextElement.FontSizeProperty.AddOwner(typeof (Control), (PropertyMetadata) new FrameworkPropertyMetadata((object) SystemFonts.MessageFontSize, FrameworkPropertyMetadataOptions.Inherits));
0
追加された