我仍在学习wpf,正在尝试创建自己的控件,但在将函数注册为依赖项时遇到问题

假设我有控件,我希望用户为控件的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"/>


但是它没有用,当遇到“ Control_OnChange”时,它给了我一个XAML解析异常,有人可以指出正确的方向吗?我在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"/>

关于c# - WPF将功能注册为依赖项属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26212421/

10-09 19:23