事件处理程序不工作-Popup上的Lost Focus事件



当弹出窗口失去焦点时,我试图关闭它(即用户点击弹出窗口之外的某个地方)

在我的主页上,我有这个

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方法。有什么建议吗?

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

不管怎样,如果你只是想在点击其他地方时关闭Popup,你只需要确保弹出窗口的IsLightDismissEnabled属性设置为true,无论是在XAML代码中:

<Popup IsLightDismissEnabled="True" ...>

或在C#代码中:

p.IsLightDismissEnabled = true;

当选择第二个选项时,您可以在实例化Popup之后的任何时候设置它,当在页面的构造函数中设置它时,在调用InitializeComponent()之后,例如:

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

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

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

最新更新