Свойство зависимости WPF для пользовательского элемента управления - PullRequest
2 голосов
/ 05 декабря 2009

Я немного запутался в том, как установить свойство зависимости для пользовательского элемента управления.

Я создал пользовательский элемент управления, поэтому он является производным от класса Control.

public class CustControl : Control 
    {
      static CustControl()
       {
         DefaultStyleKeyProperty.OverrideMetadata(typeof(CustControl), new FrameworkPropertyMetadata(typeof(CustControl)));       
       }        
    }

Чтобы установить свойство зависимости, я должен зарегистрировать его внутри класса, который должен быть производным от объекта DependencyObject. Так что должен быть другой класс:

class CustClass : DependencyObject
{
    public readonly static DependencyProperty MyFirstProperty = DependencyProperty.Register("MyFirst", typeof(string), typeof(CustControl), new PropertyMetadata(""));

    public string MyFirst
    {
        get { return (string)GetValue(MyFirstProperty); }
        set { SetValue(MyFirstProperty, value); }
    }
}

Как теперь я мог установить свойство MyFirst как свойство зависимости для CustControl?

1 Ответ

4 голосов
/ 05 декабря 2009

Чтобы установить свойство зависимости, я должен зарегистрировать его внутри класса, который должен быть производным от DependencyObject. Так что должен быть другой класс:

Нет, не должно. Control уже происходит от DependencyObject. Поскольку наследование транзитивно , это также делает CustControl подтипом DependencyObject. Просто поместите все это в CustControl:

public class CustControl : Control 
{
      static CustControl()
      {
          DefaultStyleKeyProperty.OverrideMetadata(typeof(CustControl), new FrameworkPropertyMetadata(typeof(CustControl)));       
      }        

    public readonly static DependencyProperty MyFirstProperty = DependencyProperty.Register("MyFirst", typeof(string), typeof(CustControl), new PropertyMetadata(""));

    public string MyFirst
    {
        get { return (string)GetValue(MyFirstProperty); }
        set { SetValue(MyFirstProperty, value); }
    }
}
...