我试图在失去焦点时关闭弹出窗口(即用户点击弹出窗口外的某处)
在我的主页中我有这个
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方法。有什么建议吗?
答案 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
事件。