2015-04-20 52 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

相關問題