第三章-路由事件
路由事件: 冒泡事件(从自己开始)、隧道时间(预览事件preview开头,从根开始开始)、直接事件
事件的分类:
作用: 生命周期时间
输入事件
手写笔事件
触控事件
一、冒泡事件
<Grid> <StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"> <Border Background="Red" Margin="30" Width="130" Height="130" MouseLeftButtonDown="Border_MouseLeftButtonDown"></Border> </StackPanel> </Grid>
private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { MessageBox.Show("Boder"); e.Handled = true;//拦截,不让事件继续往上抛 } private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { MessageBox.Show("Stack"); }
点击Border后,先弹出"Border"对话框后又弹出"Stack"对话框
点击StackPanel后,弹出"Stack"对话框
二、隧道事件
<Grid> <StackPanel PreviewMouseDown="StackPanel_PreviewMouseDown"> <Border Background="Red" Margin="30" Width="130" Height="130" PreviewMouseDown="Border_PreviewMouseDown"></Border> </StackPanel> </Grid>
private void StackPanel_PreviewMouseDown(object sender, MouseButtonEventArgs e) { MessageBox.Show("StackPanel"); e.Handled = true;//拦截 } private void Border_PreviewMouseDown(object sender, MouseButtonEventArgs e) { MessageBox.Show("Boder"); }
点击StackPanel后,先弹出"Stack"对话框后又弹出"Border"对话框
点击Border后,弹出"Border"对话框
三、鼠标事件
<!--鼠标移动时,显示鼠标窗体当前坐标--> <!--鼠标按下时显示坐标,放开则不显示--> <Grid x:Name="grid" MouseMove="Grid_MouseMove" MouseDown="grid_MouseDown" MouseUp="grid_MouseUp" > <TextBlock x:Name="txtPoint" Foreground="Black"></TextBlock> </Grid>
可在鼠标按下时加入鼠标捕获功能Mouse.Capture((UIElement(sender))) 释放时可释放捕捉Mouse.Capture(null)
private bool IsShowPoint = false; //鼠标按下事件 private void Grid_MouseMove(object sender, MouseEventArgs e) { if (IsShowPoint) { Point point = e.GetPosition(grid); txtPoint.Text = $"当前坐标为({point.X},{point.Y})"; } } //鼠标按下事件 private void grid_MouseDown(object sender, MouseButtonEventArgs e) { IsShowPoint = true; } //鼠标释放事件 private void grid_MouseUp(object sender, MouseButtonEventArgs e) { IsShowPoint = false; }
浙公网安备 33010602011771号