Как получить «эту» область видимости в конструкторе пользовательских элементов управления в WPF - PullRequest
1 голос
/ 01 февраля 2012

Я расширил флажок WPF и создал Customcontrol, чтобы я мог добавлять функции к флажку.

Мой конструктор выглядит следующим образом

static MyCheckBox()
{
    DefaultStyleKeyProperty.OverrideMetadata(
        typeof(MyCheckBox), new FrameworkPropertyMetadata(typeof(MyCheckBox)));
}

Теперь я хочу добавить обработчик:

Validation.AddErrorHandler(this, OnValidationError);

Но у меня нет области действия this в статическом конструкторе.Как я могу решить это?

По сути, я пытаюсь установить свойство зависимости, которое я создал (IsValid9 = true или false, когда вызывается событие Validation.Error. Поэтому янеобходимо зарегистрировать обработчик.

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Указатель this всегда указывает на текущий экземпляр .Но статический конструктор вызывается перед инициализацией любого экземпляра, поэтому не может быть указателя на экземпляр.Вот почему вы не можете использовать.

Поэтому сначала вам нужен экземпляр.И самое первое действие, которое выполняет новый экземпляр, это его конструктор:

public class MyCheckBox
{
    static MyCheckBox()
    {
        DefaultStyleKeyProperty.OverrideMetadata(
            typeof(MyCheckBox), new FrameworkPropertyMetadata(typeof(MyCheckBox)));
    }

    public MyCheckBox() 
    {
        Validation.AddErrorHandler(this, OnValidationError);
    }

    void OnValidationError(object sender, ValidationErrorEventArgs args)
    {
        //...
    }
}
1 голос
/ 02 февраля 2012

Добавление общедоступного нестатического конструктора:

public MyCheckBox() 
{
    Validation.AddErrorHandler(this, OnValidationError);
}
...