如何在C#WPF中将孩子的MouseDown鼓泡到父级?

时间:2014-04-29 02:34:23

标签: c# .net wpf xaml event-bubbling

我有一个<Image>的WPF窗口,它的子FrameworkElement有一个<Rectangle>。我想要的行为是矩形上的中鼠标按钮允许它在图像上移动,而左/右鼠标在<Rectangle><Image>上移动以使矩形减少/增加尺寸。我在<Rectangle>工作周围拖动了孩子<Image>,并且通过矩形处理了左/右点击。如何让{/ 1}}处理Left / Right MouseDown,这样我就不必复制用于更改子节点和父节点中矩形大小的代码了?

4 个答案:

答案 0 :(得分:0)

您可以在此处执行以下操作:

<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.";
        }
    }
}

希望这能解决您的问题。

答案 1 :(得分:0)

您可以使用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.";
        }
    }
}

希望这会有所帮助。继续编码:)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

查看Thumb控件。你可以轻松地设置一个9个大小的网格:

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

为每个拇指指定适当的光标,并根据其位置处理拇指的拖动事件。它比处理自己鼠标按下/向上/移动事件的方式更强大。