2014-10-06 5 views
0

Я все еще учусь WPF и я пытаюсь создать свой собственный контроль, но у меня возникают проблемы, чтобы зарегистрировать функцию как DependencyPropertyWPF зарегистрировать функцию как свойство зависимостей

Скажем, у меня есть мой контроль, я хочу, чтобы пользователь, чтобы задать функцию для события OnChange моего контроля, я попытался следующие

public readonly static DependencyProperty OnChangeProperty; 

    public delegate void DependencyPropertyChangedEventHandler(Object sender, DependencyPropertyChangedEventArgs e); 
    public DependencyPropertyChangedEventHandler Change; 


    OnChangeProperty = DependencyProperty.Register("OnChange", typeof(DependencyPropertyChangedEventHandler), typeof(MyControl), new FrameworkPropertyMetadata(null)); 

    public DependencyPropertyChangedEventHandler OnChange 
    { 
     get { return (DependencyPropertyChangedEventHandler)GetValue(OnChangeProperty); } 
     set { SetValue(OnChangeProperty, value); } 
    } 

    <my:MyControl OnChange="Control_OnChange"/> 

Но это не сработало, это дает мне исключение XAML синтаксического анализа, когда он сталкивается с «Control_OnChange», Может кто-то указать мне верное направление ? Я не нашел ответа на этот вопрос в MSDN или SO, я что-то упустил?

ответ

4

Вы не можете зарегистрировать функцию как свойство зависимости. Вы должны Create a Custom Routed Event:

// Register the routed event 
public static readonly RoutedEvent SelectedEvent = 
EventManager.RegisterRoutedEvent("Selected", RoutingStrategy.Bubble, 
typeof(RoutedEventHandler), typeof(MyCustomControl)); 

// .NET wrapper 
public event RoutedEventHandler Selected 
{ 
    add { AddHandler(SelectedEvent, value); } 
    remove { RemoveHandler(SelectedEvent, value); } 
} 

Тогда вы можете поднять событие в вашей UserControl:

// Raise the routed event "selected" 
RaiseEvent(new RoutedEventArgs(MyCustomControl.SelectedEvent)); 

Затем вы можете добавить обработчик к событию:

<my:MyCustomControl Selected="Control_OnSelected"/>

+0

Он работает благодаря:) – Tofandel

Смежные вопросы