WPF将函数注册为依赖属性

Tof*_*del 1 c# wpf controls

我还在学习wpf并且我正在尝试创建自己的控件但是我将问题注册为dependencyProperty

假设我有我的控件,我希望用户为我的控件的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"/>
Run Code Online (Sandbox Code Playgroud)

但是它没有用,它在遇到"Control_OnChange"时给了我一个XAML解析异常,有人能指出我正确的方向吗?我在MSDN或SO中没有找到任何答案,我错过了什么?

Nov*_*i S 5

您不能将函数注册为依赖项属性.您应该创建自定义路由事件:

// 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); }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的UserControl:

// Raise the routed event "selected"
RaiseEvent(new RoutedEventArgs(MyCustomControl.SelectedEvent));
Run Code Online (Sandbox Code Playgroud)

然后,您可以为事件添加处理程序:

<my:MyCustomControl Selected="Control_OnSelected"/>