2011-01-05 10 views
8

Dostaję jakieś dziwne zachowanie, że mam problemy z:Okno Problem ostrości z .NET 4.0 i WindowsFormstHost

  1. dodać prosty Formy sterować z pudełkiem tekst do WindowsFormsHost;
  2. Dodaj przycisk, który otwiera inne okno WPF (nie ustawia właściciela);
  3. Zmaksymalizuj oryginalne okno WPF i kliknij pole tekstowe, aby uzyskać ogniskowanie ;
  4. Kiedy to zrobisz, a następnie spróbuj aktywować inne okno WPF z pasek zadań zostanie aktywowany i następnie dezaktywowany.

Niepokojące jest to, że jeśli skompiluję to pod .NET 3.5, to nie będzie problemu.

Wszelkie pomysły?

+0

Widziałem ten sam problem - czy zbliżyłeś się do poprawki? –

+1

Jest to z pewnością błąd: 1. Dzieje się tak również wtedy, gdy okno nie jest zmaksymalizowane 2. Dzieje się tak, jeśli używasz również ALT + TAB! Jeśli jednak używasz WINDOWS + TAB (lub przełączania Aero), przełącza się do okna podrzędnego. Nie mam dzisiaj czasu, ale podejrzewam, że istnieje sposób na wychwycenie zdarzenia Windows, które ma miejsce podczas przełączania paska zadań/Alt + Tab, wtedy fokus można odjąć od kontrolki WinfowsFormsHost, trzymanej w polu statycznym w aplikacji WPF, a następnie przywrócone po przełączeniu z powrotem do okna urażonego. Zweryfikowałem, że przy standardowym polu tekstowym WPF ten problem nie występuje. –

+0

Uwaga: Kiedy mówię, że jest to z pewnością błąd, nie jest on weryfikowany przez Microsoft .. tylko zachowanie i symptomy wskazują na "błąd". –

Odpowiedz

1

Realizacja tego na oknie pochodzącego pomaga trochę - ale nie rozwiązuje problemu całkowicie:

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); 
} 

To ustawia ostrość do okna na dezaktywować - nie jest to na tyle wcześnie, więc aktywacja odwraca się, ale kiedy ty alt-tab po raz drugi się przełącza. Skoncentrowana kontrola nie jest jednak zachowana. Próbowałem ustawić ostrość, ale nic dobrego.