Popup永远不会关闭

时间:2011-09-29 21:14:00

标签: wpf popup

WPF让我从这里感到紧张。我为弹出窗口配置了一些复杂的内容(网格,按钮等)。我在文本框MouseDown预览事件上将其StaysOpen属性设置为False,将IsOpen设置为True。

事情是,它会打开,但在点击窗外的任何地方时都不会关闭。

有什么建议吗?

谢谢!

更新

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

5 个答案:

答案 0 :(得分:4)

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

感谢您的所有答案。

答案 1 :(得分:1)

我使用后面的代码来初始化弹出窗口,并且我发现如果从其他UI动作(例如鼠标事件)运行同步,它就不会关闭。要解决此问题,我将其运行为异步:

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

答案 2 :(得分:0)

  

我在文本框MouseDown预览事件上设置了IsOpen。​​

设置为什么? TextBox托管在哪里?

我只能用提供的信息来猜测,但是当你在Popup外面点击时,你的事件处理程序正在解雇并再次打开它。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我也有这个问题,除了Button的PreviewMouseButtonUp事件。假设Popups存在一些错误,并试图在隧道事件中打开它们是准确的,并引导我走向我的修复路径(这是更通用的)。

我需要通过监听冒泡事件而不是隧道事件来解决此问题(主机控件是通用的/可能是几种类型的控件),特别是使用AddHandler(RoutedEvent,Delegate,Boolean)方法来捕获已处理的事件。

WAG问题出在从隧道转换到冒泡的某个地方。