小编Tim*_*ine的帖子

WPF附加事件与非附加事件

问题是,经过我的研究,我仍然无法找到常规路由事件和附加事件之间的区别.功能有什么区别?或者其他人是否同意没有?

履行

ButtonBase类声明一个名为ClickEvent的路由事件; 正常的路由事件.

public static readonly RoutedEvent ClickEvent = EventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ButtonBase));

[Category("Behavior")]
public event RoutedEventHandler Click
{
    add
    {
        base.AddHandler(ClickEvent, value);
    }
    remove
    {
        base.RemoveHandler(ClickEvent, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mouse类声明一个名为MouseDownEvent的路由事件; 附加活动.

public static readonly RoutedEvent MouseDownEvent = EventManager.RegisterRoutedEvent("MouseDown", RoutingStrategy.Bubble, typeof(MouseButtonEventHandler), typeof(Mouse));

public static void AddMouseDownHandler(DependencyObject element, MouseButtonEventHandler handler)
{
    UIElement.AddHandler(element, MouseDownEvent, handler);
}

public static void RemoveMouseDownHandler(DependencyObject element, MouseButtonEventHandler handler)
{
    UIElement.RemoveHandler(element, MouseDownEvent, handler);
}
Run Code Online (Sandbox Code Playgroud)

这两个事件都在EventManager中注册,并以相同的方式存储为公共,静态,只读,字段.ClickEvent有一个支持CLR事件字段,带有自定义添加和删除访问器,分别调用base.AddHandler和base.RemoveHandler; 这两个都是在ButtonBase派生自的UIElement基类中声明的.MouseDownEvent有两个静态方法AddMouseDownHandler和RemoveMouseDownHandler,它们最终调用UIElement中声明的两个AddHandler和RemoveHandler方法,就像ClickEvent一样.

在静态类上声明的实际附加事件的Add*Handler和Remove*Handler静态方法必须遵循特定的命名约定,以允许WPF事件系统使用反射在运行时查找适当的添加和删除处理程序.


用法

这两个事件都可以在XAML中附加处理程序,如下所示:

<Grid Button.Click="Grid_Click"
      Mouse.MouseDown="Grid_MouseDown">
</Grid>
Run Code Online (Sandbox Code Playgroud)

这两个事件都可以在代码中附加如下:

// Attach ClickEvent …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml routedevent

25
推荐指数
1
解决办法
8984
查看次数

标签 统计

c# ×1

routedevent ×1

wpf ×1

xaml ×1