如何泡一个孩子';s鼠标向下移动到C#WPF中的父级

本文关键字:移动 C#WPF 鼠标 孩子 何泡一 | 更新日期: 2023-09-27 18:00:52

我有一个带有<Image>的WPF窗口,它的子FrameworkElement是<Rectangle>。我想要的行为是在矩形上使用鼠标中键,使其可以在图像周围移动,并在<Rectangle><Image>上使用鼠标左键/鼠标右键,使矩形大小减小/增大。我可以在<Image>周围拖动子<Rectangle>,也可以通过矩形处理左/右单击。我如何让<Image>处理左/右MouseDown,这样我就不必重复更改子对象和父对象中矩形大小的代码?

如何泡一个孩子';s鼠标向下移动到C#WPF中的父级

在这里你可以做类似的事情:

<Grid Background="Transparent" StackPanel.MouseDown="StackPanel_MouseDown">
    <StackPanel Margin="70" Background="DarkGray" MouseDown="StackPanel_MouseDown">
        <TextBlock x:Name="XTextBlock"></TextBlock>
    </StackPanel>
</Grid>

代码背后:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void StackPanel_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (sender.GetType().Name.Equals("StackPanel"))
        {
            XTextBlock.Text = "I am direct raised from StackPanel.";
        }
        else //sender.GetType().Name.Equals("Grid")
        {
            XTextBlock.Text += "I am bubble raised from Grid.";
        }
    }
}

希望这能解决你的问题。

要检查按下了哪个按钮,可以使用MouseButtonEventArgs。例如

if(e.ChangedButton == MouseButton.Left)
{
    //do something
}  

您可以使用PreviewMouseDown来利用路由事件隧道行为,如下所示:

<Grid Background="Transparent" PreviewMouseDown="Grid_PreviewMouseDown">
    <StackPanel Margin="70" Background="DarkGray" Grid.PreviewMouseDown="Grid_PreviewMouseDown">
        <TextBlock x:Name="XTextBlock"></TextBlock>
    </StackPanel>
</Grid>

代码背后:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void Grid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        if (sender.GetType().Name.Equals("StackPanel"))
        {
            XTextBlock.Text += ", I am tunneled raised from StackPanel.";
        }
        else //sender.GetType().Name.Equals("Grid")
        {
            XTextBlock.Text = "I am direct raised from Grid.";
        }
    }
}

希望这会有所帮助。保持编码:(

查看Thumb控件。你可以很容易地设置一个9个拇指的网格,就像这样:

+--+-----------+--+
|  |           |  |
+--+-----------+--+    
|  |           |  |
|  |           |  |
|  |           |  |
|  |           |  |
|  |           |  |
+--+-----------+--+    
|  |           |  |
+--+-----------+--+

为每个拇指分配适当的光标,并根据拇指的位置处理拇指的拖动事件。它比自己处理鼠标向下/向上/移动事件更健壮。