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事件。
在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事件。
相关文章推荐