防止父级在子级鼠标down时触发事件

本文关键字:事件 down 鼠标 | 更新日期: 2023-09-27 17:54:34

我有一个Grid放在Window的顶部,在它里面有一个Image。假定Grid正在拖动具有MouseDown事件的窗口。

然而,每当我想要触发MouseDown事件到Child Image时,它不工作,而是触发Grid's

private void toggleTbr_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
     this.DragMove();
}
private void leapTcb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
     e.Handled = true;
     //my code
}

正如你所看到的,我尝试了e.Handled = true;,但它没有改变什么,然后我想尝试使用PreviewMouseLeftButtonDown而不是MouseLeftButtonDown,但是,仍然是一样的。

我在这里做错了什么,或者如何防止Grid触发?

XAML:

<Grid x:Name="toggleTbr" MouseLeftButtonDown="toggleTbr_MouseLeftButtonDown">
    <Grid x:Name="leapTcb_" Height="21" Width="26">
        <Image x:Name="leapTcb" MouseLeftButtonDown="leapTcb_MouseLeftButtonDown">
            <Image.Background>
                <ImageBrush Source="Resources/leap_1.png"/>
            </Image.Background>
        </Image>
    </Grid>
</Grid>

防止父级在子级鼠标down时触发事件

你的代码工作得很好,但如果它还不够,你可以尝试使用这个:

IsHitTestVisible="True"

Image元素没有Background属性,可以直接在Image元素上设置Source属性。

<Image x:Name="leapTcb" Source="Resources/leap_1.png" MouseLeftButtonDown="leapTcb_MouseLeftButtonDown"/>

使用这个,这是我的工作

<Grid x:Name="toggleTbr" MouseLeftButtonDown="toggleTbr_MouseLeftButtonDown" Background="Red">
        <Grid x:Name="leapTcb_" Height="21" Width="26">
<Image x:Name="leapTcb" PreviewMouseLeftButtonDown="leapTcb_MouseLeftButtonDown">
            <Image.Background>
                <ImageBrush Source="Resources/leap_1.png"/>
            </Image.Background>
        </Image>
        </Grid>
    </Grid>