我还在学习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中没有找到任何答案,我错过了什么?
您不能将函数注册为依赖项属性.您应该创建自定义路由事件:
// 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"/>