2015-04-20 49 views
0

我想,当它失去焦点关闭弹出窗口在我的MainPage(即用户水龙头的地方在弹出外)事件处理不工作 - 失去焦点事件上弹出

我有这个

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

Popup控件在所有其他控件之上呈现。看来,虽然Popup是开放的,其他控件无法获得焦点,所以Popup不能够失去其焦点。 (原因可能是Popup控件被赋予一个唯一的窗口句柄,而不是像所有其他控件一样被渲染为页面的一部分 - 至少在WPF中是这种情况。请纠正我,如果我错了。 )。

无论如何,如果你只是想攻别的地方时关闭Popup,你只需要确保弹出的IsLightDismissEnabled属性设置为true,无论是在XAML代码:

<Popup IsLightDismissEnabled="True" ...> 

或C#代码:

p.IsLightDismissEnabled = true; 

当选择第二个选项,你可以随时实例化Popup后设置,并在页面的构造函数中设置时,该呼叫为0后,例如:

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

在这种情况下,你不会需要LostFocus事件都没有。

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

+0

请注意,为什么你认为添加你的代码可能是有用的;)。 –

+0

我在哪里添加这个?我尝试添加到MainPage的构造函数,它的行为不正常 – erotavlas

+0

我认为它的意图是将它添加到事件处理程序中。 – neontapir

相关问题