我仍在学习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/