您的位置:首页 > 其它

WPF路由事件

2008-12-03 00:01 309 查看
我做了一个例子来探求路由事件的传递过程。

在Window中添加一个Label和一个Button。

private void Window_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

private void label1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)

private void label1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

private void button1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)

private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

private void button1_Click(object sender, RoutedEventArgs e)

{

txtMessage.Text = txtMessage.Text + "ButtonClick ";

}

可以看到每个事件的代码其实就是在txtMessage中显示该事件的特征字符串。

点击Label,txtMessage显示的文本是WT LT LP WP 。这意味着点击Label的时候,WPF首先从根元素Window开始沿着逻辑树下行直到事件的发起者Label,执行各个元素的tunneling事件;接着从Label开始向上直到Window,执行各个元素的bubbling事件。

这四个事件的第二个参数MouseButtonEventArgs e是引用了同一个实例。可以分别在这四个事件中添加e.Handled = true来证明这个观点。

接着点击Button,txtMessage显示的文本是WT BT ButtonClick。可以看到Button控件默认中止了bubbling事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: