я хочу сделать, добавляют пользовательские обработчики событий к использованию элементов платформы по умолчанию DependencyProperties
.
Что-то как следующее:
<Border custom:MyProps.HandleMyEvent="someHandler">...</Border>
Вот код позади для управления, которое содержит элемент Границы:
public class MyPage : Page{
public void someHandler(object sender, EventArgs e){
//do something
}
}
Вот грубый образец того, как я воображаю класс, который определяет свойство:
public class MyProps{
public event EventHandler MyInternalHandler;
public static readonly DependencyProperty HandleMyEventProperty = ...
public void SetHandleMyEvent(object sender, EventHandler e){
MyInternalHandler += e;
}
}
Проблема состоит в том, что я не знаю/, находят любые подсказки, как объединиться DependencyProperties
с событиями/делегатами и EventHandlers
.
У Вас есть подсказка?
Я предполагаю, что это не имеет ничего общего с WPF, это это серебряный вопрос.
Прежде всего, вы не можете просто добавить Событие
к существующему элементу управления. В конце концов, вы добавляете прикрепленные Свойства
, тогда как события обрабатываются по-другому, это не свойства.
Вам необходимо создать новый тип, который имеет это событие, а затем создать присоединенное свойство этого типа.
Вот базовый тип, который просто имеет событие: -
public class MyEventer
{
public event EventHandler MyEvent;
// What would call this??
protected void OnMyEvent(EventArgs e)
{
if (MyEvent != null)
MyEvent(this, e);
}
}
Теперь мы создаем присоединенное свойство, которое имеет MyEventer
в качестве своего свойства, я предпочитаю помещать их в отдельный статический класс.
public static class MyProps
{
public static MyEventer GetEventer(DependencyObject obj)
{
return (MyEventer)obj.GetValue(EventerProperty );
}
public static void SetEventer(DependencyObject obj, MyEventer value)
{
obj.SetValue(EventerProperty , value);
}
public static readonly DependencyProperty EventerProperty =
DepencencyProperty.RegisterAttached("Eventer", typeof(MyEventer), typeof(MyProps), null)
}
}
Теперь вы прикрепляете это к элементу управления следующим образом: -
<Border ...>
<custom:MyProps.Eventer>
<custom:MyEventer MyEvent="someHandler" />
</custom:MyProps.Eventer>
</Border>
Если вы скомпилируете проект перед написанием этого xaml, вы заметите, что Visual Studio предложит вам возможность создать обработчик событий в коде позади для ты.
Конечно, остается важный вопрос: как вы собирались вызвать событие?