WPF中的自定义附加事件

我可能在这里弄错了术语,但我想我正在尝试创建一个附加事件。

在Surface SDK中,您可以执行以下操作:

 

我想创建一个自定义事件,可以在XAML中以相同的方式添加处理程序,但我遇到了麻烦。

我可以创建一个自定义路由事件,但XAML intellisense没有看到它,如果我只是定期输入它,则不会添加事件处理程序。 这是我的事件定义:

 public static class TagRectEvents { public static readonly RoutedEvent TagRectEnterEvent = EventManager.RegisterRoutedEvent( "TagRectEnter", RoutingStrategy.Bubble, typeof( RoutedEventHandler ), typeof( TagRectEvents ) ); public static void AddTagRectEnterHandler( DependencyObject d, RoutedEventHandler handler ) { UIElement element = d as UIElement; if ( element == null ) { return; } element.AddHandler( TagRectEvents.TagRectEnterEvent, handler ); } public static void RemoveTagRectEnterHandler( DependencyObject d, RoutedEventHandler handler ) { UIElement element = d as UIElement; if ( element == null ) { return; } element.RemoveHandler( TagRectEvents.TagRectEnterEvent, handler ); } } 

我只是错了吗? 我看到的所有“附加行为”示例更多的是添加附加属性,然后使用设置该属性的元素进行操作。

为了使附加事件显示在Intellisense中,它必须位于一个驻留在附属程序集 – 或.dll库中的类中。 添加库的最简单方法是在解决方案中添加“WPF自定义控件库”项目。 使用Wpf控件库只能确保自动添加所有典型的引用(它们不会与C#类库一起添加。)只要删除其在主题/通用中的关联样式,就可以删除CustomControl1.cs。 XAML。

您必须要么不映射命名空间,要么/或附加事件,如local:TagRectEvents.TagRectEnterEvent 。 您必须使用TagRectEnter ,而不是TagRectEnterEvent

命名空间映射:

  xmlns:local="clr-namespace:WpfInfrastructure.WpfAttachedEvents" 

用法:

  

处理程序:

  public void MyHandler(object sender, RoutedEventArgs e) { System.Diagnostics.Debug.WriteLine("Hurray!"); } 

我使用了你的代码,它在这里正常工作。

Interesting Posts