【问题标题】:Popup Never Closes弹出窗口永不关闭
【发布时间】:2011-09-29 21:13:59
【问题描述】:

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

问题是当点击窗口外的任何地方时它会打开但从不关闭。

有什么建议吗?

谢谢!

更新:

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

【问题讨论】:

  • 您是否尝试过手动关闭它,就像您有关闭按钮一样?或映射一个像 ESC 键这样的键来退出弹出窗口。
  • 我可以这样做..但我需要它在失去焦点时自动关闭。
  • 你能添加简单的 XAML 来演示这个问题吗(也可以帮助你调试)?
  • 我也面临同样的问题。我正在使用 PHP SSDK 进行 FB 登录。从 FB 成功验证后,弹出窗口不会关闭。我的网站在同一个弹出窗口中打开。我需要知道如何在 FB 登录连接中使用重定向和取消 url,以及如何在登录后刷新父窗口。提前致谢。奥马尔

标签: wpf popup


【解决方案1】:

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

感谢您的所有回答。

【讨论】:

  • 我同意,同样的事情对我有用。奇怪的行为,但有效。在代码中为 IsOpenProperty 创建了与切换按钮 IsChecked 属性的绑定,并且工作正常。我会接受的:)
【解决方案2】:

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

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

【讨论】:

  • 此解决方案似乎对我有用,并且同意这似乎也仅在从某些 UI 事件(如MouseUp)打开时才会发生。我认为弹出窗口可能永远不会获得焦点,因此永远不会有失去焦点事件来关闭它。
【解决方案3】:

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

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

我只能根据所提供的少量信息进行猜测,但我想说的是,当您在 Popup 之外单击时,您的事件处理程序正在触发并再次打开它。

【讨论】:

  • 文本框位于窗口中使用的用户控件内。在用户控件中,每当单击文本框时,我都会设置 IsOpen = true。当弹出窗口失去焦点时,它永远不会关闭。
【解决方案4】:

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

【讨论】:

  • 它什么都不做。如果我在弹出 IsOpen 属性设置为 true 的情况下启动窗口,它会正常工作。如果我在文本框 PreviewMouseButtonDown 事件上设置它不起作用。
【解决方案5】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多