事件处理程序无法正常工作 - Popup上的Lost Focus事件

时间:2015-04-20 03:50:42

标签: c# .net windows-phone-8.1

我试图在失去焦点时关闭弹出窗口(即用户点击弹出窗口外的某处)

在我的主页中我有这个

    Popup p;
    public MainPage()
    {
        this.InitializeComponent();
        this.NavigationCacheMode = NavigationCacheMode.Required;
        p = new Popup();
        p.LostFocus += new RoutedEventHandler(p_LostFocus);
    }

我失去的焦点事件是这个

    void p_LostFocus(object sender, RoutedEventArgs e)
    {
        p.IsOpen = false;
    }

当我点击弹出窗口外没有任何反应时,它甚至不执行p_lostFocus方法。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

Popup控件呈现在所有其他控件之上。似乎Popup处于打开状态时,其他控件无法获得焦点,因此Popup无法失去焦点。 (原因可能是Popup控件被分配了一个唯一的窗口句柄,而不是像所有其他控件一样呈现为页面的一部分 - 至少在WPF中是这种情况。如果我&#请纠正我39;我错了......)。

无论如何,如果你只是想在点击其他地方时关闭Popup,你只需要确保弹出式IsLightDismissEnabled属性设置为true,或者在XAML代码中:

<Popup IsLightDismissEnabled="True" ...>

或在C#代码中:

p.IsLightDismissEnabled = true;

选择第二个选项时,您可以在实例化Popup后随时设置它,并在调用InitializeComponent()后在页面构造函数中设置它,例如:< / p>

p = new Popup();
p.IsLightDismissEnabled = true;

在这种情况下,您根本不需要LostFocus事件。

如果您想在关闭弹出窗口后执行其他操作,请注册其Closed事件而不是LostFocus事件。