Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 弹出窗口从不关闭_Wpf_Popup - Fatal编程技术网

Wpf 弹出窗口从不关闭

Wpf 弹出窗口从不关闭,wpf,popup,Wpf,Popup,WPF真的让我在这里摆脱了紧张。我用一些复杂的内容(网格、按钮等)配置了一个弹出窗口。在textbox MouseDown预览事件中,我将其StaysOpen属性设置为False,将IsOpen设置为True 当点击窗口外的任何地方时,它会打开,但不会关闭 有什么建议吗 谢谢 更新: 我的弹出窗口里面有按钮。当我单击其中一个按钮时,当我在其外部单击时,弹出窗口关闭。事件路由是否发生了一些奇怪的事情 我在文本框鼠标向下预览事件上设置了IsOpen 设置为什么?文本框在哪里托管 我只能根据提供的少量

WPF真的让我在这里摆脱了紧张。我用一些复杂的内容(网格、按钮等)配置了一个弹出窗口。在textbox MouseDown预览事件中,我将其StaysOpen属性设置为False,将IsOpen设置为True

当点击窗口外的任何地方时,它会打开,但不会关闭

有什么建议吗

谢谢

更新:

我的弹出窗口里面有按钮。当我单击其中一个按钮时,当我在其外部单击时,弹出窗口关闭。事件路由是否发生了一些奇怪的事情

我在文本框鼠标向下预览事件上设置了IsOpen

设置为什么?文本框在哪里托管


我只能根据提供的少量信息进行猜测,但我想说,当您在
弹出窗口外单击时,您的事件处理程序正在启动并再次打开它。

您可以使用弹出窗口的
LostFocus
事件。如果焦点不在弹出窗口内,请将其
IsOpen
设置为false以关闭它。

如果被任何其他控制事件打开,弹出窗口似乎不会关闭。我只是将IsOpen属性绑定到ToggleButton的IsChecked属性,以模拟组合框


谢谢你的回答。

我也有这个问题,除了一个按钮的PreviewMouseButtonUp事件。假设弹出窗口中存在一些bug,并试图在隧道事件中打开它们,这是正确的,并引导我找到了修复方法(这是一个更通用的方法)

我需要通过侦听冒泡事件而不是隧道事件来解决这个问题(主机控件是通用的/可以是几种类型的控件),特别是使用方法来捕获已处理的事件


WAG当从隧道转换到冒泡时,问题就出现了。

我使用代码隐藏来初始化弹出窗口,我发现如果从其他UI操作(如鼠标事件)运行同步,它不会关闭。为了解决这个问题,我异步运行它:

    public static void ShowPopupMessage(string message)
    {
        DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() =>
        {
            var popup = new Popup
            {
                Child = new AutoHideMessage(message),
                StaysOpen = false,
                IsOpen = true
            };
        }));
    }

您是否尝试过手动关闭,就像您有任何关闭按钮一样?或者将一个像ESC键这样的键映射到弹出窗口中。我可以这样做。。但是我需要它在失去焦点时自动关闭。你能添加简单的XAML来演示这个问题吗(也可以帮助你调试)?我面临同样的问题。我正在使用PHP SSDK进行FB登录。从FB成功验证后,弹出窗口未关闭。我的网站正在同一弹出窗口中打开。我需要知道如何在FB登录连接中使用重定向和取消url,以及如何在登录后刷新父窗口。提前谢谢。umar文本框位于窗口中使用的用户控件内。在用户控件中,每当单击文本框时,我都将IsOpen设置为true。当弹出窗口失去焦点时,它不会关闭。它什么也不做。如果我启动窗口时将popup IsOpen属性设置为true,它将正常工作。如果我在textbox PreviewMouseButtonDown事件中设置它,它将不起作用。我同意,同样的事情也适用于我。奇怪的行为,但奏效了。为代码中的IsOpenProperty创建了一个到切换按钮IsChecked属性的绑定,效果很好。我接受:)这个解决方案似乎对我有效,我同意只有从某些UI事件(如
MouseUp
)打开时才会出现这种情况。我认为弹出窗口可能永远不会获得焦点,因此永远不会有失去焦点的事件来关闭它。