首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MouseLeftButtonDown处理程序从未调用

MouseLeftButtonDown处理程序从未调用
EN

Stack Overflow用户
提问于 2013-11-12 15:28:39
回答 2查看 721关注 0票数 2

我在为一个让我发疯的问题而挣扎。

以下是我的XAML代码(简化):

代码语言:javascript
复制
<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的构造函数中:

代码语言:javascript
复制
AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(UserControl_MouseDown), true);

我需要捕捉鼠标点击为我自己的UserControl (我必须画一个选择矩形与鼠标在上面)。因此,我使用AddHandler(),并指示" true“,以便即使MouseLeftButtonDownEvent已被按钮"theButton”处理,也可以挂起它(因为当单击按钮时,它会将已处理的事件属性标记为MSDN所说的)

当我在UserControl中单击时,函数UserControl_MouseDown通常会被调用。但是,当我单击按钮时,关联的处理程序(“theButton_Click”)永远不会被调用。对于我的SelectionChanged事件,ComboBox事件也是一样的:它的处理程序从未被调用过。

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

如果我为我的UserControl取消了这个事件,那就没问题了。我和PreviewMouseDown试过按钮。它运行,但我不能用它作为我的ComboBox

您有任何线索来解决这个问题并让我的UserControl、我的按钮和ComboBox调用它们各自的处理程序吗?

谢谢你的帮忙

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

代码语言:javascript
复制
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;
            }
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-13 09:20:53

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

代码语言:javascript
复制
this.CaptureMouse();

太明显了..。我的错

票数 1
EN

Stack Overflow用户

发布于 2013-11-12 15:30:48

我不知道为什么要处理它,即使您为已处理的事件设置了true

但你可以在按钮之前抓住它:

代码语言:javascript
复制
 AddHandler(PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(UserControl_MouseDown), true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19933188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档