路由事件相比.NET事件的优点
- 为在最合适的位置编写紧凑的、组织良好的用于处理事件的代码提供了灵活性。
- Xaml无限套娃的树状结构,可以简单的在逻辑树上堆砌出定制按钮,而不必像Winform那样,动不动就要大费周章的自定义控件,比如带文字和图片的按钮,这时候,路由事件支持在父级控件上解耦的订阅内部的全部控件的事件,减少了代码量。
<Grid x:Name="grid" MouseDown="Grid_MouseDown" ButtonBase.Click="grid_Click">
<StackPanel>
<RadioButton Content="RadioButton" />
<Button Content="Button" />
<CheckBox Content="CheckBox" />
</StackPanel>
</Grid>
grid.AddHandler(MouseDownEvent, new MouseButtonEventHandler((sender, args) =>
{
}));
grid.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler((sender, args) =>
{
}));
- 如果路由事件自身拥有,直接写事件名即可,如果是自己没有的,或者附加路由事件,要加上类名。
- 只要背后的静态RoutedEvent是同一个,都可以被订阅,但不是所有的,要沿着树,所有的不合理,不然解析e要好多次。
- Tag,或 Name区分。