Udostępnij za pośrednictwem


Współdziałanie WPF i Windows Forms

WPF i Windows Forms prezentują dwie różne architektury do tworzenia interfejsów aplikacji. Przestrzeń nazw System.Windows.Forms.Integration udostępnia klasy, które umożliwiają typowe scenariusze współdziałania. Dwie kluczowe klasy, które implementują możliwości współdziałania, są WindowsFormsHost i ElementHost. W tym temacie opisano, które scenariusze współdziałania są obsługiwane i które scenariusze nie są obsługiwane.

Notatka

Szczególną uwagę poświęca się scenariuszowi kontroli hybrydowej . Kontrolka hybrydowa ma kontrolę z jednej technologii zagnieżdżonej w kontrolce z drugiej technologii. Jest to również nazywane zagnieżdżonym współdziałaniem. wielopoziomowa kontrolka hybrydowa ma więcej niż jeden poziom zagnieżdżania kontrolek hybrydowych. Przykładem wielopoziomowej zagnieżdżonej interoperacyjności jest kontrolka Windows Forms zawierająca kontrolkę WPF, która zawiera inną kontrolkę Windows Forms. Kontrole hybrydowe wielopoziomowe nie są obsługiwane.

Hostowanie kontrolek formularzy systemu Windows w WPF

Następujące scenariusze współdziałania są obsługiwane, gdy kontrolka WPF hostuje kontrolkę Windows Forms:

  • Kontrolka WPF może hostować co najmniej jedną kontrolkę Windows Forms przy użyciu języka XAML.

  • Może hostować co najmniej jedną kontrolkę Windows Forms przy użyciu kodu.

  • Może hostować kontrolki kontenera Windows Forms, które zawierają inne kontrolki Windows Forms.

  • Może hostować formularz główny/szczegół z głównym formularzem WPF i szczegółami Windows Forms.

  • Może hostować formularz master/detail z głównym formularzem Windows Forms i szczegółami WPF.

  • Może hostować co najmniej jedną kontrolkę ActiveX.

  • Może hostować co najmniej jedną kontrolkę złożoną.

  • Może hostować kontrolki hybrydowe przy użyciu języka XAML (Extensible Application Markup Language).

  • Może hostować kontrolki hybrydowe przy użyciu kodu.

Obsługa układu

Na poniższej liście opisano znane ograniczenia, gdy element WindowsFormsHost próbuje zintegrować hostowaną kontrolkę Windows Forms z systemem układu WPF.

  • W niektórych przypadkach nie można zmienić rozmiaru kontrolek formularzy systemu Windows lub można zmieniać ich rozmiar jedynie do określonych wymiarów. Na przykład kontrolka windows Forms ComboBox obsługuje tylko jedną wysokość, która jest definiowana przez rozmiar czcionki kontrolki. W układzie dynamicznym WPF, który zakłada, że elementy mogą rozciągać się w pionie, hostowana kontrolka ComboBox nie będzie rozciągać się zgodnie z oczekiwaniami.

  • Nie można obracać ani przechylać kontrolek formularzy systemu Windows. Na przykład w przypadku rotacji interfejsu użytkownika o 90 stopni hostowane kontrolki Windows Forms zachowają ich położenie w poziomie.

  • W większości przypadków kontrolki Windows Forms nie obsługują skalowania proporcjonalnego. Mimo że ogólne wymiary kontrolki będą skalowane, kontrolki podrzędne i elementy składowe kontrolki mogą nie zmieniać rozmiaru tak, jak się tego oczekuje. To ograniczenie zależy od tego, jak dobrze każda kontrolka Windows Forms obsługuje skalowanie.

  • W interfejsie użytkownika WPF można zmienić kolejność elementów z, aby kontrolować nakładające się zachowanie. Hostowana kontrolka Windows Forms jest rysowana w osobnym HWND, więc zawsze jest rysowana nad elementami WPF.

  • Kontrolki Windows Forms obsługują skalowanie automatyczne na podstawie rozmiaru czcionki. W interfejsie użytkownika WPF zmiana rozmiaru czcionki nie zmienia rozmiaru całego układu, chociaż poszczególne elementy mogą dynamicznie zmieniać rozmiar.

Właściwości otoczenia

Niektóre właściwości otoczenia kontrolek WPF mają odpowiedniki windows Forms. Te właściwości otoczenia są propagowane do hostowanych kontrolek Windows Forms i udostępniane jako właściwości publiczne w kontrolce WindowsFormsHost. Kontrolka WindowsFormsHost przekłada każdą właściwość otoczenia WPF na odpowiednik windows Forms.

Aby uzyskać więcej informacji, zobacz Windows Forms i mapowanie właściwości WPF.

Zachowanie

W poniższej tabeli opisano zachowanie współdziałania.

Zachowanie Obsługiwane Nieobsługiwane
Przezroczystość Renderowanie kontrolek formularzy Windows obsługuje przezroczystość. Tło nadrzędnej kontrolki WPF może stać się tłem hostowanych kontrolek Windows Forms. Niektóre kontrolki formularzy Systemu Windows nie obsługują przezroczystości. Na przykład kontrolki TextBox i ComboBox, gdy są hostowane przez WPF, nie będą przezroczyste.
Tabulacja Kolejność tabulacji dla hostowanych kontrolek Windows Forms jest taka sama jak w przypadku, gdy te kontrolki są hostowane w aplikacji opartej na formularzach systemu Windows.

Przechodzenie za pomocą klawiszy TAB i SHIFT+TAB między kontrolkami WPF i Windows Forms działa jak zwykle.

Kontrolki formularzy systemu Windows, które mają wartość właściwości TabStopfalse, nie przyjmują fokusu, gdy użytkownik przemieszcza się za pomocą klawisza Tab przez kontrolki.

— Każda kontrolka WindowsFormsHost ma wartość TabIndex, która określa, kiedy kontrolka WindowsFormsHost otrzyma fokus.
— Kontrolki formularzy systemu Windows, które znajdują się wewnątrz kontenera WindowsFormsHost, są zgodne z kolejnością określoną przez właściwość TabIndex. Tabbing z ostatniego indeksu zakładki przenosi fokus na następną kontrolkę WPF, jeśli istnieje. Jeśli nie istnieje żadna inna kontrolka WPF, którą można objąć fokusem, naciśnięcie klawisza Tab powoduje powrót do pierwszej kontrolki Windows Forms w kolejności tabulacji.
- TabIndex wartości kontrolek wewnątrz WindowsFormsHost są wyrażone względem pokrewnych kontrolek Windows Forms, które są zawarte w kontrolce WindowsFormsHost.
- Tabbing respektuje zachowanie specyficzne dla kontroli. Na przykład naciśnięcie klawisza TAB w kontrolce TextBox, która ma wartość właściwości AcceptsTabtrue, wstawia tabulator w polu tekstowym, zamiast przesuwać fokus.
Nie dotyczy.
Nawigacja za pomocą strzałek - Nawigacja za pomocą strzałek w kontrolce WindowsFormsHost jest taka sama jak w zwykłej kontrolce kontenera Windows Forms: Strzałka w górę i STRZAŁKA W LEWO wybierz poprzednią kontrolkę, a STRZAŁKA W DÓŁ i STRZAŁKA W PRAWO wybierz następną kontrolkę.
- Klawisze STRZAŁKA W GÓRĘ i STRZAŁKA W LEWO z pierwszej kontrolki znajdującej się w kontrolce WindowsFormsHost wykonują taką samą akcję jak skrót klawiaturowy SHIFT+TAB. Jeśli istnieje kontrolka WPF z możliwością koncentracji uwagi, fokus przenosi się poza kontrolkę WindowsFormsHost. To zachowanie różni się od standardowego zachowania ContainerControl tym, że nie występuje zawijanie do ostatniej kontrolki. Jeśli nie istnieje żadna inna kontrolka WPF, fokus wraca do ostatniej kontrolki Windows Forms w kolejności tabulacji.
- STRZAŁKA W DÓŁ i STRZAŁKA W PRAWO z ostatniej kontrolki znajdującej się w kontrolce WindowsFormsHost wykonują tę samą akcję co TAB. Jeśli istnieje kontrolka WPF z możliwością koncentracji uwagi, fokus przenosi się poza kontrolkę WindowsFormsHost. To zachowanie różni się od standardowego zachowania ContainerControl tym, że nie następuje przejście do pierwszej kontrolki. Kiedy nie istnieje żadna inna kontrolka WPF, fokus powraca do pierwszej kontrolki Windows Forms w kolejności tabulacji.
Nie dotyczy.
Akceleratory Akceleratory działają jak zwykle, chyba że zaznaczono inaczej w kolumnie "Nieobsługiwane". Zduplikowane akceleratory między technologiami nie działają jak zwykłe akceleratory duplikatów. Gdy akcelerator jest zduplikowany w różnych technologiach, z co najmniej jedną kontrolą Windows Forms oraz drugą kontrolą WPF, kontrola Windows Forms zawsze odbiera akcelerator. Kursor nie przełącza się między kontrolkami po naciśnięciu duplikowanego przycisku przyspieszającego.
klawisze skrótów Skróty klawiszowe działają jak zwykle, z wyjątkiem przypadków zaznaczonych w kolumnie "Nieobsługiwane". - Skróty Windows Forms obsługiwane są na etapie przetwarzania wstępnego zawsze mają pierwszeństwo przed skrótami WPF. Jeśli na przykład masz kontrolkę ToolStrip z zdefiniowanymi skrótami CTRL+S i istnieje polecenie WPF powiązane z CTRL+S, obsługa kontrolki ToolStrip jest zawsze wywoływana jako pierwsza, niezależnie od fokusu.
- Skróty klawiszowe formularzy systemu Windows obsługiwanych przez zdarzenie KeyDown są przetwarzane jako ostatnie w WPF. To zachowanie można zapobiec, przesłaniając metodę IsInputKey kontrolki Windows Forms lub obsługując zdarzenie PreviewKeyDown. Zwróć true z metody IsInputKey lub ustaw wartość właściwości PreviewKeyDownEventArgs.IsInputKey na true w programie obsługi zdarzeń PreviewKeyDown.
AcceptsReturn, AcceptsTab i inne zachowanie specyficzne dla kontrolek Właściwości zmieniające domyślne zachowanie klawiatury działają jak zwykle, przy założeniu, że kontrolka Windows Forms zastępuje metodę IsInputKey, aby zwrócić true. Kontrolki Windows Forms, które zmieniają domyślne zachowanie klawiatury przez obsługę zdarzenia KeyDown są przetwarzane ostatnio w kontrolce WPF hosta. Ponieważ te kontrole są przetwarzane na końcu, mogą powodować nieoczekiwane zachowanie.
Zdarzenia wejścia i wyjścia Gdy fokus nie przechodzi do kontrolki zawierającej ElementHost, zdarzenia Enter i Leave są zgłaszane jak zwykle, kiedy fokus zmienia się w pojedynczej kontrolce WindowsFormsHost. W przypadku następujących zmian fokusu, zdarzenia Enter i Leave nie są zgłaszane.

- Od wewnątrz do zewnątrz kontrolki WindowsFormsHost.
- Od zewnątrz do wewnątrz elementu sterującego WindowsFormsHost.
— Poza kontrolką WindowsFormsHost.
— Z kontrolki Windows Forms hostowanej w kontrolce WindowsFormsHost do kontrolki ElementHost hostowanej w tym samym WindowsFormsHost.
Wielowątkowość Obsługiwane są wszystkie odmiany wielowątkowości. Zarówno technologie Windows Forms, jak i WPF zakładają model współbieżności jednowątkowy. Podczas debugowania wywołania obiektów frameworku z innych wątków powodują wyjątek, aby wymusić to wymaganie.
Bezpieczeństwo Wszystkie scenariusze współdziałania wymagają pełnego zaufania. W żadnym scenariuszu współdziałania nie jest dozwolone częściowe zaufanie.
Dostępność Obsługiwane są wszystkie scenariusze ułatwień dostępu. Produkty technologii pomocniczej działają poprawnie, gdy są używane w przypadku aplikacji hybrydowych, które zawierają zarówno kontrolki Windows Forms, jak i WPF. Nie dotyczy.
Schowek Wszystkie operacje schowka funkcjonują jak zwykle. Obejmuje to wycinanie i wklejanie między kontrolkami Windows Forms i WPF. Nie dotyczy.
Funkcja przeciągania i upuszczania Wszystkie operacje przeciągania i upuszczania działają jak zwykle. Obejmuje to operacje między kontrolkami Windows Forms i WPF. Nie dotyczy.

Hostowanie kontrolek WPF w formularzach systemu Windows

Następujące scenariusze współdziałania są obsługiwane, gdy kontrolka Windows Forms hostuje kontrolkę WPF:

  • Hostowanie co najmniej jednej kontrolki WPF przy użyciu kodu.

  • Kojarzenie arkusza właściwości z co najmniej jedną hostowaną kontrolką WPF.

  • Hostowanie co najmniej jednej strony WPF w formularzu.

  • Uruchamianie okna WPF.

  • Hostowanie formularza głównego/szczegółowego przy użyciu aplikacji Windows Forms (część główna) i WPF (szczegóły).

  • Udostępnianie formularza główny/szczegółowy z głównym elementem WPF i szczegółami w formularzach systemu Windows.

  • Hostowanie niestandardowych kontrolek WPF.

  • Hostowanie kontrolek hybrydowych.

Właściwości otoczenia

Niektóre właściwości otoczenia kontrolek Windows Forms mają odpowiedniki WPF. Te właściwości otoczenia są propagowane do hostowanych kontrolek WPF i widoczne jako właściwości publiczne w kontrolce ElementHost. Kontrolka ElementHost tłumaczy każdą właściwość otoczenia formularzy systemu Windows na odpowiednik WPF.

Aby uzyskać więcej informacji, zobacz Windows Forms i mapowanie właściwości WPF.

Zachowanie

W poniższej tabeli opisano zachowanie współdziałania.

Zachowanie Obsługiwane Nie jest obsługiwane
Przezroczystość Obsługa renderowania kontrolek WPF zapewnia przezroczystość. Tło nadrzędnej kontrolki Windows Forms może stać się tłem hostowanych kontrolek WPF. Nie dotyczy.
Wielowątkowość Obsługiwane są wszystkie odmiany wielowątkowości. Zarówno technologie Windows Forms, jak i WPF zakładają model współbieżności jednowątkowy. Podczas debugowania wywołania obiektów frameworka z innych wątków spowodują zgłoszenie wyjątku w celu wymuszenia tego wymagania.
Bezpieczeństwo Wszystkie scenariusze współdziałania wymagają pełnego zaufania. W scenariuszach częściowego zaufania nie są dozwolone żadne współdziałania.
Dostępność Obsługiwane są wszystkie scenariusze ułatwień dostępu. Produkty technologii pomocniczej działają poprawnie, gdy są używane w przypadku aplikacji hybrydowych, które zawierają zarówno kontrolki Windows Forms, jak i WPF. Nie dotyczy.
Schowek Wszystkie operacje schowka działają jak zwykle. Obejmuje to wycinanie i wklejanie między kontrolkami Windows Forms i WPF. Nie dotyczy.
Funkcja przeciągania i upuszczania Wszystkie operacje przeciągania i upuszczania działają jak zwykle. Obejmuje to operacje między kontrolkami Windows Forms i WPF. Nie dotyczy.

Zobacz też