二、使用
2.1 例子
//自定义事件类
public class MyEventControl:ContentControl
{
public static readonly RoutedEvent AAAEvent = EventManager.RegisterRoutedEvent("bbb", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyEventControl));
public event RoutedEventHandler AAA
{
add
{
base.AddHandler(AAAEvent, value);
}
remove
{
base.RemoveHandler(AAAEvent, value);
}
}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
RaiseEvent(new RoutedEventArgs(AAAEvent));
}
}
// xaml页面
<local:MyEventControl x:Name="mybtnsimple"
AAA="Mybtnsimple_AAA">Click to see Tap custom event work</local:MyEventControl>
// xaml 后台
private void Mybtnsimple_AAA(object sender, RoutedEventArgs e)
{
MessageBox.Show("666");
}
2.2 路由类型
- 冒泡路由(从下到上)
- 隧道路由(从上到下)
- 直接路由
2.3 添加处理程序
- Xaml
<Image Name="img1" Source="Images/1.jpg" MouseEnter="Image_MouseEnter"></Image>
- 后台+=
img1.MouseEnter += new MouseEventHandler(Img_MouseEnter);
or
img1.MouseEnter += Img_MouseEnter;
- AddHandler()方法
img1.AddHandler(Image.MouseEnterEvent, new MouseEventHandler(Img_MouseEnter));
2.2 断开事件处理程序
- 通过-=
//第一种写法。
img1.MouseEnter -= new MouseEventHandler(Img_MouseEnter);
//第二种写法。
img1.MouseEnter -= Img_MouseEnter;
- RemoveHandler()方法
img1.RemoveHandler(Image.MouseEnterEvent, new MouseEventHandler(Img_MouseEnter));
2.3 RoutedEventArgs
Source
Source表示的是LogicalTree上的消息源头
OriginalSource
OriginalSource表示的是VisualTree上的源头
RoutedEvent
通过事件处理程序为触发的事件提供RoutedEvent对象,如果同一个事件处理程序处理不同的事件,这一信息是非常有用的。
Handled
该属性允许终止事件的冒泡或隧道过程,如果将该属性设置为true,就终止了传递。
网友评论