【问题标题】:WPF popup capturing mouse doubleclick eventsWPF 弹出窗口捕获鼠标双击事件
【发布时间】:2010-12-11 10:50:54
【问题描述】:

在我的主应用程序窗口中,有一些控件,每个控件都会打开一个弹出窗口,向用户显示更多控件。

主应用程序窗口中的其他控件具有 mousedoubleclick 事件处理程序。我的问题是当用户在弹出窗口中双击时,弹出窗口后面的控件正在接收 mousedoubleclick 事件。

我已经尝试将 mousedoubleclick 事件处理程序添加到弹出窗口的父级,并处理该事件,但它仍会进入主应用程序窗口。

    private void ParentControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
    }

我也尝试在弹出窗口的 MouseEnter 事件处理程序中调用 Popup.CaptureMouse(),但该方法总是失败(返回 false)。

    void popup_MouseEnter(object sender, MouseEventArgs e)
    {
        e.Handled = true;
        Popup popup = sender as Popup;
        bool success = popup.CaptureMouse();
    }

当弹出窗口打开时,还有其他方法可以防止鼠标事件在主应用程序窗口中触发吗?

【问题讨论】:

  • 吉姆,我似乎无法重现您的问题。澄清一下,当您提到弹出窗口时,这是一个新的 Window 表单,还是主窗口中的一个控件,将其可见性从隐藏/折叠更改为可见。
  • 弹出,我的意思是弹出类。见msdn.microsoft.com/en-us/library/…
  • 您在哪个控件上设置了事件处理程序?
  • 发布您的弹出代码,包括 xaml 和 cs!!
  • 你解决过这个问题吗?我遇到了同样的问题。我尝试在弹出窗口下方的控件(DataGrid)上使用预览...版本的鼠标事件,但没有区别。

标签: c# wpf .net-3.5 popup mouseevent


【解决方案1】:

简单!而不是使用控件的 MouseDoubleClick 事件

private void myControl_MouseDoubleClick(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    MessageBox.Show("MouseDoubleClick on control");

}

使用 PreviewMouseDoubleClick 事件。

private void myControl_PreviewMouseDoubleClick(System.Object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    MessageBox.Show("PreviewMouseDoubleClick on control");

}

现在双击您的控件不会同时调用父级的 DoubleClick 事件。

【讨论】:

  • 这个答案没有解决 OP 希望在弹出窗口上捕获 DoubleClick 事件而不是它下面的控件。
猜你喜欢
  • 2019-02-09
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
相关资源
最近更新 更多