冒泡事件: 触发控件事件的顺序:从上层到底层
隧道事件:触发控件事件的顺序:从底层到上层
案例
MainWindow.xaml文件
<Window x:Class="HappyWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:ControlLibrary;assembly=ControlLibrary"
Title="MainWindow" Height="248" Width="525">
<Grid MouseMove="grid_MouseMove" PreviewMouseMove="grid_PreviewMouseMove" x:Name="grid" Margin="0,0,0,87">
<Button Height="30" Width="100" Content="点击我" MouseMove="Button_MouseMove" PreviewMouseMove="Button_PreviewMouseMove"/>
</Grid>
</Window>
MainWindow.xaml.cs文件
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_MouseMove(object sender, MouseEventArgs e)
{
MessageBox.Show("冒泡事件,button被触发");
// e.Handled = true; //阻止冒泡事件
}
private void grid_MouseMove(object sender, MouseEventArgs e)
{
MessageBox.Show("冒泡事件,grid被触发");
}
}
//执行顺序是Button_MouseMove =》 grid_MouseMove
//由里层到外层
隧道事件
private void Button_PreviewMouseMove(object sender, MouseEventArgs e)
{
MessageBox.Show("隧道事件,button被触发");
}
private void grid_PreviewMouseMove(object sender, MouseEventArgs e)
{
MessageBox.Show("隧道事件,grid被触发");
}
//执行顺序是 grid_MouseMove ==》Button_MouseMove
//由外层层到里层