第三章-路由事件

路由事件: 冒泡事件(从自己开始)、隧道时间(预览事件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;
      }

 

posted @ 2025-12-14 10:40  nonAny  阅读(1)  评论(0)    收藏  举报