gpt4 book ai didi

c# - 从未调用过 MouseLeftButtonDown 处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:46 26 4
gpt4 key购买 nike

我正在努力解决一个让我发疯的问题。

这是我的 XAML 代码(简化):

<UserControl>
<Canvas>
<Grid>
<ScrollViewer>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical">
<Canvas>
<Button Name="theButton" Click="theButton_Click"></Button>
<ComboBox Name="theCombo" SelectionChanged="theCombo_SelectionChanged"></ComboBox>
</Canvas>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Grid>
</Canvas>
</UserControl>

在该 UserControl 的构造函数中:

AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(UserControl_MouseDown), true);

我需要为我自己的 UserControl 捕捉鼠标点击(我必须在鼠标上方绘制一个选择矩形)。所以我使用 AddHandler(),并指示“true”,这样我就可以 Hook MouseLeftButtonDownEvent,即使它已被我的按钮“theButton”处理(因为单击按钮时,它会将事件 Handled 属性标记为 true,如 MSDN说)

当我在 UserControl 内部单击时,通常会调用我的函数 UserControl_MouseDown。但是当我点击我的按钮时,相关的处理程序(“theButton_Click”)永远不会被调用。我的 ComboBox 的 SelectionChanged 事件也是如此:它的处理程序从未被调用。

我使用了一个名为 Snoop 的工具来查看事件路由,这似乎是正常的:我的按钮捕捉到 MouseDown,然后将其 Handled 属性设置为 True。但是代码永远不会到达处理程序。

如果我为我的 UserControl 解除事件,就可以了。我尝试使用 PreviewMouseDown 作为按钮。它可以运行,但我不能将它用于我的 ComboBox

你有什么线索可以解决这个问题并让我的 UserControl 和我的 Button 和 ComboBox 调用它们各自的处理程序吗?

谢谢你的帮助

编辑:我的 UserControl 事件处理程序的代码

private void UserControl_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left && !_isMoving)
{
_isLeftMouseButtonDownOnWindow = true;
_origMouseDownPoint = e.GetPosition(this);
this.CaptureMouse();
e.Handled = true;
}
}

最佳答案

复制/粘贴我的处理程序代码后问题解决了...通过删除此行:

this.CaptureMouse();

那太明显了……我的错

关于c# - 从未调用过 MouseLeftButtonDown 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19933188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com