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. System.Windows.Forms.Integration Przestrzeń nazw udostępnia klasy, które umożliwiają typowe scenariusze współdziałania. Dwie kluczowe klasy, które implementują możliwości współdziałania, to WindowsFormsHost i ElementHost. W tym temacie opisano, które scenariusze współdziałania są obsługiwane i które scenariusze nie są obsługiwane.

Uwaga

Szczególną uwagę należy wziąć pod uwagę w scenariuszu 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 wieloszczepowego współdziałania zagnieżdżonego jest kontrolka Windows Forms zawierająca kontrolkę WPF, która zawiera inną kontrolkę Windows Forms. Kontrolki hybrydowe wieloszczepowe 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 on hostować kontrolki kontenera Windows Forms, które zawierają inne kontrolki windows Forms.

  • Może on hostować formularz wzorca/szczegółów ze szczegółami wzorca WPF i formularzy systemu Windows.

  • Może on hostować formularz główny/szczegółowy ze szczegółami wzorca formularzy systemu Windows i 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 WindowsFormsHost element 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że mieć rozmiar tylko do określonych wymiarów. Na przykład kontrolka Formularze systemu ComboBox Windows 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 ComboBox kontrolka nie będzie rozciągać się zgodnie z oczekiwaniami.

  • Nie można obracać ani niesymetrycznych 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 zgodnie z oczekiwaniami. 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 Formularze systemu Windows jest rysowana w osobnym HWND, więc zawsze jest rysowana na podstawie elementów 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 tłumaczy każdą właściwość otoczenia WPF na odpowiednik windows Forms.

Aby uzyskać więcej informacji, zobacz Windows Forms and WPF Property Mapping (Mapowanie właściwości systemu Windows i WPF).

Zachowanie

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

Zachowanie Obsługiwane Nieobsługiwane
Przezroczystość Renderowanie kontrolek formularzy systemu 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 nie będą przezroczyste w przypadku hostowanych przez WPF.
Tabulatorem 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.

Tabulatory z kontrolki WPF do kontrolki Windows Forms z klawiszem TAB i klawisze SHIFT+TAB działają jak zwykle.

Kontrolki Windows Forms, które mają TabStop wartość właściwości, nie otrzymują fokusu false , gdy użytkownik przechodzi za pomocą kontrolek.

— Każda kontrolka WindowsFormsHost ma TabIndex wartość, która określa, kiedy ta WindowsFormsHost kontrolka otrzyma fokus.
— Kontrolki formularzy systemu Windows, które znajdują się wewnątrz WindowsFormsHost kontenera, są zgodne z kolejnością TabIndex określoną przez właściwość . Tabbing z ostatniego indeksu karty koncentruje się na następnej kontrolce WPF, jeśli istnieje. Jeśli nie istnieje żadna inna kontrolka WPF z możliwością koncentracji uwagi, tabbing powróci do pierwszej kontrolki Windows Forms w kolejności tabulacji.
- TabIndex wartości kontrolek wewnątrz WindowsFormsHost kontrolki są względem równorzędnych kontrolek Windows Forms, które znajdują się w kontrolce WindowsFormsHost .
- Tabbing honoruje zachowanie specyficzne dla kontrolek. Na przykład naciśnięcie klawisza TAB w kontrolce TextBox , która ma AcceptsTab wartość true właściwości wprowadź kartę w polu tekstowym zamiast przenosić fokus.
Nie dotyczy.
Nawigacja za pomocą klawiszy strzałek - Nawigacja za pomocą klawiszy strzałek w WindowsFormsHost kontrolce jest taka sama jak w zwykłej kontrolce kontenera Windows Forms: klawisze STRZAŁKA W GÓRĘ i STRZAŁKA W LEWO wybierają poprzednią kontrolkę, a klawisze 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 zawartej w kontrolce WindowsFormsHost wykonują tę samą akcję co 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 ContainerControl zachowania w przypadku braku zawijania do ostatniej kontrolki. Jeśli nie istnieje żadna inna kontrolka WPF, fokus powraca do ostatniej kontrolki Windows Forms w kolejności tabulacji.
- Klawisze STRZAŁKA W DÓŁ i STRZAŁKA W PRAWO z ostatniej kontrolki zawartej w kontrolce WindowsFormsHost wykonują tę samą akcję co klawisz 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 ContainerControl zachowania w przypadku braku zawijania do pierwszej kontrolki. Jeśli 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, z wyjątkiem przypadków, w których w kolumnie "Nieobsługiwane". Zduplikowane akceleratory między technologiami nie działają jak zwykłe akceleratory duplikatów. Gdy akcelerator jest duplikowany w różnych technologiach, z co najmniej jednym kontrolką Windows Forms, a drugi w kontrolce WPF, kontrolka Windows Forms zawsze odbiera akcelerator. Fokus nie przełącza się między kontrolkami po naciśnięciu zduplikowanego akceleratora.
Klawisze skrótów Klawisze skrótów działają jak zwykle, z wyjątkiem sytuacji, w których zaznaczono w kolumnie "Nieobsługiwane". - Klawisze skrótów formularzy systemu Windows obsługiwane na etapie przetwarzania wstępnego zawsze mają pierwszeństwo przed klawiszami skrótów WPF. Jeśli na przykład masz kontrolkę ToolStrip z zdefiniowanymi klawiszami skrótów CTRL+S i istnieje polecenie WPF powiązane z ctrl+S, ToolStrip procedura obsługi sterowania jest zawsze wywoływana jako pierwsza, niezależnie od fokusu.
- Klawisze skrótów formularzy systemu Windows obsługiwane przez KeyDown zdarzenie są przetwarzane ostatnio w WPF. To zachowanie można zapobiec, przesłaniając metodę kontrolki IsInputKey Windows Forms lub obsługując PreviewKeyDown zdarzenie. Wróć true z IsInputKey metody lub ustaw wartość PreviewKeyDownEventArgs.IsInputKey właściwości na true w PreviewKeyDown procedurze obsługi zdarzeń.
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ć truewartość . Kontrolki Windows Forms, które zmieniają domyślne zachowanie klawiatury przez obsługę KeyDown zdarzenia, są przetwarzane ostatnio w kontrolce WPF hosta. Ponieważ te kontrolki są przetwarzane ostatnio, mogą powodować nieoczekiwane zachowanie.
Wprowadzanie i opuszczanie zdarzeń Gdy fokus nie przechodzi do kontrolki zawierającej ElementHost , zdarzenia Enter i Leave są zgłaszane jak zwykle, gdy fokus zmienia się w jednej WindowsFormsHost kontrolce. Po wystąpieniu następujących zmian fokusu nie są zgłaszane zdarzenia Enter i Leave:

- Od wewnątrz do zewnątrz kontrolki WindowsFormsHost .
- Od zewnątrz do wewnątrz kontrolki WindowsFormsHost .
- Poza kontrolką WindowsFormsHost .
— Z kontrolki Windows Forms hostowanej w kontrolce WindowsFormsHost do kontrolki hostowanej ElementHost wewnątrz tej samej WindowsFormsHostkontrolki .
Wielowątkowość Obsługiwane są wszystkie odmiany wielowątków. Zarówno technologie Windows Forms, jak i WPF zakładają model współbieżności jednowątkowy. Podczas debugowania wywołania obiektów struktury z innych wątków zgłaszają wyjątek w celu wymuszenia tego wymagania.
Zabezpieczenia Wszystkie scenariusze współdziałania wymagają pełnego zaufania. Brak scenariuszy współdziałania jest dozwolony w częściowym zaufaniu.
Ułatwienia dostępu 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.

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 wzorca/szczegółów za pomocą wzorca formularzy systemu Windows i szczegółów WPF.

  • Hostowanie formularza wzorca/szczegółów ze szczegółami wzorca WPF i formularzy 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 and WPF Property Mapping (Mapowanie właściwości systemu Windows i WPF).

Zachowanie

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

Zachowanie Obsługiwane Nieobsługiwane
Przezroczystość Renderowanie kontrolek WPF obsługuje 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ątków. Zarówno technologie Windows Forms, jak i WPF zakładają model współbieżności jednowątkowy. Podczas debugowania wywołania obiektów struktury z innych wątków zgłaszają wyjątek w celu wymuszenia tego wymagania.
Zabezpieczenia Wszystkie scenariusze współdziałania wymagają pełnego zaufania. Brak scenariuszy współdziałania jest dozwolony w częściowym zaufaniu.
Ułatwienia dostępu 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ż