Wpf 通过鼠标或触摸关闭弹出窗口可能会导致单击事件

Wpf 通过鼠标或触摸关闭弹出窗口可能会导致单击事件,wpf,popup,touch,Wpf,Popup,Touch,我有一个视图,其中有许多按钮在viewmodel中运行命令 当我在顶部显示一个设置弹出窗口,然后通过触摸外部将其关闭时,触摸事件还会在我的触摸点下方的按钮上引发一个单击事件。我不希望那个按钮点击发生。当弹出窗口打开时,某些按钮仍然可见 我使用StaysOpen=True并自行管理弹出窗口,因为出于某种原因,当我触摸鼠标外部时,弹出窗口不会自动关闭。关闭弹出窗口的代码如下所示:- 私有void Grid\u预览TouchDownObject发送器,TouchEventArgs e { var tp

我有一个视图,其中有许多按钮在viewmodel中运行命令

当我在顶部显示一个设置弹出窗口,然后通过触摸外部将其关闭时,触摸事件还会在我的触摸点下方的按钮上引发一个单击事件。我不希望那个按钮点击发生。当弹出窗口打开时,某些按钮仍然可见

我使用StaysOpen=True并自行管理弹出窗口,因为出于某种原因,当我触摸鼠标外部时,弹出窗口不会自动关闭。关闭弹出窗口的代码如下所示:-

私有void Grid\u预览TouchDownObject发送器,TouchEventArgs e { var tp=e.gettouchpointoptionspupchild.Position; 如果选项Popup.IsOpen&&!tp.X>=0&&tp.X=0&&tp.Y 谢谢你的帮助


Jerry

在主窗口的所有内容上方放置一个矩形或其他东西

给它一个低透明度或透明填充

您可能需要将其设置为可聚焦

在显示弹出窗口时将其设置为可见。设置它在未折叠时折叠。这样,当他们试图点击或触摸一些他们不应该触摸的东西时,他们就不能了

你考虑过如果他们想运行其他应用程序会发生什么吗

<>而不是在其他地方处理点击和触摸,而是在你的应用程序中考虑在你的弹出窗口内的父控件上处理IsCurror。这样,当他们点击弹出窗口之外的任何东西时,就会失去焦点,你可以关闭弹出窗口


你也可以考虑让你的弹出窗口只是你的父窗口中的一个面板,并在其中有一个提交或OK按钮来驱动在完成它时应该发生的任何事情。p> 所以安迪的建议对我有效,那就是打开和关闭弹出窗口后面的画布来吞下流氓点击事件,但也需要延迟

private async void Grid_PreviewTouchDown(object sender, TouchEventArgs e)
{
    var tp = e.GetTouchPoint(optionsPopupChild).Position;
    if (optionsPopup.IsOpen && !((tp.X >= 0 && tp.X < optionsPopupChild.ActualWidth) && (tp.Y >= 0 && tp.Y < optionsPopupChild.ActualHeight)))
    {
        optionsPopup.IsOpen = false;
        e.Handled = true;
        await TaskDelay(100);
        transCanvas.Visibility = Visibility.Collapsed
    }
}  

谢谢,我已经尝试过您描述的画布或面板方法,但没有任何帮助,但我重新尝试过,在折叠画布之前添加了一个异步延迟,这似乎解决了问题。