WPF注册功能依赖项属性

问题描述:

我还在学习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这个问题上找到任何答案,我是否错过了一些东西?

您不能将函数注册为依赖项属性。您应该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 2014-10-06 10:49:10