事件处理程序不工作 - 弹出窗口上的 Lost Focus 事件
Event handler not working - Lost Focus event on Popup
我试图在失去焦点时关闭弹出窗口(即用户点击弹出窗口外的某处)
在我的主页中我有这个
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
控件被分配了一个唯一的 window 句柄,而不是像所有其他控件一样作为页面的一部分呈现 - 至少在 WPF 中是这样。请更正如果我错了...)。
总之,如果你只是想在点击其他地方时关闭Popup
,你只需要确保弹出的IsLightDismissEnabled
属性设置为true
,或者在 XAML 代码中:
<Popup IsLightDismissEnabled="True" ...>
或在 C# 代码中:
p.IsLightDismissEnabled = true;
选择第二个选项时,您可以在实例化Popup
后的任何时间将其设置,然后将其设置在页面的构造函数中,在调用InitializeComponent()
之后,例如:
p = new Popup();
p.IsLightDismissEnabled = true;
在这种情况下,您根本不需要 LostFocus
事件。
如果您想在关闭弹出窗口后执行其他操作,请注册其 Closed
事件而不是 LostFocus
事件。
我试图在失去焦点时关闭弹出窗口(即用户点击弹出窗口外的某处)
在我的主页中我有这个
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
控件被分配了一个唯一的 window 句柄,而不是像所有其他控件一样作为页面的一部分呈现 - 至少在 WPF 中是这样。请更正如果我错了...)。
总之,如果你只是想在点击其他地方时关闭Popup
,你只需要确保弹出的IsLightDismissEnabled
属性设置为true
,或者在 XAML 代码中:
<Popup IsLightDismissEnabled="True" ...>
或在 C# 代码中:
p.IsLightDismissEnabled = true;
选择第二个选项时,您可以在实例化Popup
后的任何时间将其设置,然后将其设置在页面的构造函数中,在调用InitializeComponent()
之后,例如:
p = new Popup();
p.IsLightDismissEnabled = true;
在这种情况下,您根本不需要 LostFocus
事件。
如果您想在关闭弹出窗口后执行其他操作,请注册其 Closed
事件而不是 LostFocus
事件。