2011-01-05 56 views
8

我收到我遇到的麻煩一些奇怪的行爲:窗口焦點問題,.NET 4.0和WindowsFormstHost

  1. 添加一個簡單的形式與 文本框到WindowsFormsHost控件;
  2. 添加一個按鈕,打開另一個 WPF窗口(未設置所有者);
  3. 最大化原始WPF窗口 並點擊文本框,以便它具有 重點;
  4. 當你這樣做,然後嘗試 激活從 任務欄就被激活並 其他WPF窗口,然後停用。

令人不安的是,如果我在.NET 3.5下編譯它,它沒有任何問題。

任何想法?

+0

我看到了同樣的問題 - 你有沒有接近修復? – 2011-01-27 14:22:15

+1

這絕對是一個錯誤:1.如果窗口未最大化,也會發生這種情況。2.如果您還使用ALT + TAB,則會發生這種情況!但是,如果您使用WINDOWS + TAB(或Aero切換),它將切換到子窗口。我今天沒有時間,但我懷疑是否有辦法捕捉執行任務欄/ alt +製表符切換時發生的窗口事件,然後可以將焦點從WinfowsFormsHost控件中移除,並保留在靜態字段中在WPF應用程序上,然後將其恢復到違規窗口。我用常規的WPF文本框驗證過,這個問題不會發生。 – 2011-01-27 18:49:28

+0

注意:當我說這絕對是一個錯誤,它沒有與微軟驗證..只是行爲和症狀都指向「錯誤」。 – 2011-01-27 18:53:01

回答

1

派生窗口上實現這個有點幫助 - 但不徹底解決問題:

protected override void OnDeactivated(EventArgs e) 
{ 
    var host = System.Windows.Input.FocusManager.GetFocusedElement(this) as System.Windows.Forms.Integration.WindowsFormsHost; 
    if (host !=null) 
    { 
    Focus(); 
    } 

    base.OnDeactivated(e); 
} 

它設置聚焦的窗口上停用 - 這是不夠的早,所以激活翻轉回來,但是當你第二次切換的時候再次選中。但是,重點控制不會被保留。我嘗試調度焦點集 - 但沒有好處。