c # Переопределить свойство зависимостей системного элемента управления. - PullRequest
1 голос
/ 25 ноября 2011

Привет! Я прочитал некоторые важные вопросы в stackoverflow, но все еще не могу понять, как решить мои вопросы:

Мне нужно создать элемент управления CheckableGroupBox, который совпадает с GroupBox, но в заголовке которого есть флажок. И это имеет следующее требование:

  1. Исходный GroupBox имеет свойство Header типа объекта, мне нужно ограничить это свойство в CheckableGroupBox только строкой.

  2. Пользователи могут изменить текст заголовка (текст флажка), вызвав myCheckableGroupBox.Header = "некоторый текст здесь".

Я написал приведенный ниже код для обслуживания этих предложений:

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», тип Object должен быть производным от DependencyObject.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Вы должны использовать:

   System.Windows.Controls.GroupBox.HeaderProperty.OverrideMetadata(
            typeof(CheckableGroupBox), 
            new PropertyMetadata("", OnHeaderChangedCallback)
            );
0 голосов
/ 31 марта 2016
[CommonDependencyProperty]
public static readonly DependencyProperty FontSizeProperty = TextElement.FontSizeProperty.AddOwner(typeof (Control), (PropertyMetadata) new FrameworkPropertyMetadata((object) SystemFonts.MessageFontSize, FrameworkPropertyMetadataOptions.Inherits));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...