Взаимодействие WPF и Windows Forms

WPF и Windows Forms представляют собой две различные архитектуры для создания интерфейсов приложений. Пространство имен System.Windows.Forms.Integration предоставляет классы, которые поддерживают популярные сценарии взаимодействия. Два основных класса, которые предоставляют возможности взаимодействия — это WindowsFormsHost и ElementHost. В этом разделе описано, какие сценарии взаимодействия поддерживаются, а какие нет.

Примечание.

Особое внимание уделено сценарию гибридного элемента управления. Гибридный элемент управления — это элемент управления на основе одной технологии, в который вложен элемент управления на основе другой технологии. Это также называется вложенным взаимодействием. В многоуровневом гибридном элементе управления более одного уровня вложения. Примером многоуровневого вложенного взаимодействия является элемент управления Windows Forms, который содержит элемент управления WPF, содержащий другой элемент управления Windows Forms. Многоуровневые гибридные элементы управления не поддерживаются.

Размещение элементов управления Windows Forms в WPF

Если в элемент управления WPF вложен элемент управления Windows Forms, поддерживаются перечисленные ниже сценарии взаимодействия.

  • В него могут быть вложены один или несколько элементов управления Windows Forms с помощью XAML.

  • В него могут быть вложены один или несколько элементов управления Windows Forms, используя код.

  • В него могут быть вложены контейнерные элементы управления Windows Forms, которые содержат другие элементы управления Windows Forms.

  • В него может быть вложена форма с отношением "главный-подчиненный" с главным элементом WPF и подчиненными элементами Windows Forms.

  • В него может быть вложена форма с отношением "главный-подчиненный" с главным элементом Windows Forms и подчиненными элементами WPF.

  • В него могут быть вложены один или несколько элементов ActiveX.

  • В него могут быть вложены один или несколько составных элементов управления.

  • В него могут быть вложены гибридные элементы управления с помощью языка XAML.

  • С помощью кода в него могут быть вложены гибридные элементы управления.

Поддержка макета

В приведенном ниже списке перечислены известные ограничения при попытке элемента WindowsFormsHost интегрировать вложенный элемент управления Windows Forms в систему макета WPF.

  • В некоторых случаях размеры элемента управления Windows Forms изменять нельзя, или же их можно изменять, но только в фиксированных пределах. Например, элемент управления Windows Forms ComboBox поддерживает только одну высоту, которая определяется размером шрифта элемента управления. В динамическом макете WPF, в котором предполагается, что элементы можно растянуть по вертикали, вложенный элемент управления ComboBox не растягивается, как предполагается.

  • Элементы управления Windows Forms нельзя поворачивать или наклонять. Например, при повороте пользовательского интерфейса на 90 градусов вложенные элементы управления Windows Forms сохранят свое вертикальное положение.

  • В большинстве случаев элементы управления Windows Forms не поддерживают пропорциональное масштабирование. Несмотря на то, что общий размер элемента управления масштабируется, дочерние элементы управления и компоненты элемента управления могут изменять размеры не так, как ожидается. Это ограничение зависит от поддержки масштабирования каждым элементом управления Windows Forms.

  • В пользовательском интерфейсе WPF можно изменить z-порядок элементов для контроля поведения перекрывания. Вложенный элемент управления Windows Forms рисуется в отдельном HWND, причем он всегда рисуется поверх элементов WPF.

  • Элементы управления Windows Forms поддерживают автоматическое масштабирование в соответствии с размером шрифта. В пользовательском интерфейсе WPF изменение размера шрифта не влечет за собой изменение размера всего макета, хотя отдельные элементы могут динамически изменять размер.

Внешние свойства

Некоторые внешние свойства элементов управления WPF имеют эквиваленты Windows Forms. Эти внешние свойства распространяются на вложенные элементы управления Windows Forms и предоставляются как общие свойства элемента управления WindowsFormsHost. Элемент управления WindowsFormsHost преобразует каждое внешнее свойство WPF в соответствующий эквивалент Windows Forms.

Дополнительные сведения см. в разделе Сопоставление свойств Windows Forms и WPF.

Поведение

В приведенной ниже таблице описаны возможности взаимодействия.

Поведение Поддерживается Не поддерживается
Transparency Отрисовка элементов управления Windows Forms поддерживает прозрачность. Фон родительского элемента управления WPF может стать фоном вложенного элемента управления Windows Forms. Некоторые элементы управления Windows Forms не поддерживают прозрачность. Например, элементы управления TextBox и ComboBox не будут прозрачными при размещении WPF.
Переход по клавише TAB Последовательность табуляции для вложенных элементов управления Windows Forms та же, что и при вложении этих элементов управления в приложение, основанное на Windows Forms.

Переход от элемента управления WPF к элементу управления Windows Forms по клавишам TAB и SHIFT+TAB работает как обычно.

Элементы управления Windows Forms, имеющие значение TabStop свойства false, не получают фокус, когда пользователь переключается между элементами управления.

— Элемент управления WindowsFormsHost имеет значение TabIndex, которое определяет, когда этот элемент управления WindowsFormsHost получает фокус.
— Порядок элементов управления Windows Forms, вложенных в контейнер WindowsFormsHost, зависит от свойства TabIndex. При переходе от последнего индекса табуляции фокус получает следующий элемент управления WPF, если таковой существует. Если нет других элементов управления WPF, принимающих фокус, то переход по табуляции переводит фокус на первый элемент управления Windows Forms в последовательности табуляции.
- Значения TabIndex для элементов управления внутри WindowsFormsHost задаются относительно элементов управления Windows Forms того же уровня, вложенных в элемент управления WindowsFormsHost.
— При переходе по табуляции учитывается модель поведения элемента управления. Например, нажатие клавиши ТАВ в элементе управления TextBox, свойство true которого имеет значение AcceptsTab, приведет к вставке табуляции в текстовое поле вместо того, чтобы переводить на него фокус.
Неприменимо.
Переход с помощью клавиш со стрелками — Переход с помощью клавиш со стрелками в элементе управления WindowsFormsHost выполняется так же, как и в обычном контейнерном элементе управления Windows Forms. Клавиши СТРЕЛКА ВВЕРХ и СТРЕЛКА ВЛЕВО выбирают предыдущий элемент управления; клавиши СТРЕЛКА ВНИЗ и СТРЕЛКА ВПРАВО выбирают следующий элемент управления.
— Для первого элемента управления, содержащегося в элементе управления WindowsFormsHost, клавиши СТРЕЛКА ВВЕРХ и СТРЕЛКА ВЛЕВО выполняют те же действия, что и сочетание клавиш SHIFT+TAB. Если имеется фокусируемый элемент управления WPF, то фокус переносится вовне элемента управления WindowsFormsHost. Такое поведение отличается от стандартного поведения ContainerControl тем, что не происходит переход к последнему элементу управления. Если нет других элементов управления WPF, принимающих фокус, то фокус возвращается на последний элемент управления Windows Forms в последовательности табуляции.
— Для последнего элемента управления, содержащегося в элементе управления WindowsFormsHost, клавиши СТРЕЛКА ВНИЗ и СТРЕЛКА ВПРАВО выполняют то же действие, что и клавиша TAB. Если имеется фокусируемый элемент управления WPF, то фокус переносится вовне элемента управления WindowsFormsHost. Такое поведение отличается от стандартного поведения элемента управления ContainerControl тем, что не происходит переход к первому элементу управления. Если нет других элементов управления WPF, принимающих фокус, то фокус возвращается на первый элемент управления Windows Forms в последовательности табуляции.
Неприменимо.
Ускорители Клавиши быстрого доступа работают как обычно, за исключением пунктов, оговоренных в столбце "Не поддерживается". Повторяющиеся в различных технологиях клавиши быстрого доступа не работают как обычные повторяющиеся клавиши быстрого доступа. При дублировании клавиш быстрого доступа в различных технологиях по крайней мере для одного элемента управления Windows Forms и одного элемента управления WPF клавиша быстрого доступа всегда присваивается элементу управления Windows Forms. Фокус не переключается между элементами управления с одинаковыми клавишами быстрого доступа.
Сочетания клавиш Сочетания клавиш работают как обычно, за исключением пунктов, оговоренных в столбце "Не поддерживается". — Сочетания клавиш Windows Forms, заданные на этапе предварительной обработки, всегда имеют приоритет перед сочетаниями клавиш WPF. Например, если имеется элемент управления ToolStrip с сочетанием клавиш CTRL+S и есть команда, привязанная к сочетанию клавиш CTRL+S, первым всегда вызывается обработчик элементов управления ToolStrip, независимо от фокуса.
— Горячие клавиши Windows Forms, обрабатываемые событием KeyDown, в WPF обрабатываются последними. Это поведение можно предотвратить, переопределив метод IsInputKey обработки события PreviewKeyDown элемента управления Windows Forms. Возвратите true из метода IsInputKey или задайте значение true свойству PreviewKeyDownEventArgs.IsInputKey в обработчике событий PreviewKeyDown.
AcceptsReturn, AcceptsTab и другие специфические свойства элементов управления Свойства, изменяющие стандартное поведение клавиатуры, работают обычным образом при условии, что элемент управления Windows Forms переопределяет метод IsInputKey так, чтобы он возвращал true. Элементы управления Windows Forms, изменяющие стандартное поведение клавиатуры при обработке событий KeyDown, обрабатываются в ведущем элементе управления WPF последними. Так как эти элементы управления обрабатываются последними, они могут привести к непредвиденному поведению.
События Enter и Leave Если фокус не переходит на родительский элемент управления ElementHost, события Enter и Leave возникают как обычно при смене фокуса в одном элементе управления WindowsFormsHost. События Enter и Leave не вызываются при следующих переводах фокуса:

изнутри наружу элемента управления WindowsFormsHost;
снаружи внутрь элемента управления WindowsFormsHost;
наружу элемента управления WindowsFormsHost;
из элемента управления Windows Forms, размещенного в элементе управления WindowsFormsHost, к элементу управления ElementHost, размещенному внутри того же элемента управления WindowsFormsHost.
Многопоточность Поддерживаются все возможности многопоточности. И технология WPF, и технология Windows Forms предполагают однопоточную модель параллелизма. Во время отладки вызовы объектов платформы из других потоков будут вызывать исключение для принудительного выполнения этого требования.
Безопасность Все сценарии взаимодействия требуют полного доверия. Не допускаются сценарии взаимодействия с частичным доверием.
Специальные возможности Поддерживаются все сценарии специальных возможностей. Продукты вспомогательной технологии работают корректно, когда они используются для гибридных приложений, содержащих как элементы управления WPF, так и элементы управления Windows Forms. Неприменимо.
Буфер обмена Все операции с буфером обмена работают обычным образом. Сюда относятся операции вырезания и вставки между элементами управления WPF и Windows Forms. Неприменимо.
Функция перетаскивания Все операции перетаскивания работают обычным образом. Сюда входят операции между элементами управления Windows Forms и WPF. Неприменимо.

Размещение элементов управления WPF в Windows Forms

Если в элемент управления Windows Forms вложен элемент управления WPF, поддерживаются перечисленные ниже сценарии взаимодействия.

  • Вложение одного или нескольких элементов управления WPF с помощью кода.

  • Связывание страницы свойств с одним или несколькими вложенными элементами управления WPF.

  • Вложение одной или нескольких страниц WPF в форму.

  • Запуск окна WPF.

  • Вложение формы с отношением "главный-подчиненный" с главным элементом Windows Forms и подчиненными элементами WPF.

  • Вложение формы с отношением "главный-подчиненный" с главным элементом WPF и подчиненными элементами Windows Forms.

  • Вложение пользовательских элементов управления WPF.

  • Вложение гибридных элементов управления.

Внешние свойства

Некоторые внешние свойства элементов управления Windows Forms имеют эквиваленты WPF. Эти внешние свойства распространяются на вложенные элементы управления WPF и предоставляются как общие свойства элемента управления ElementHost. Элемент управления ElementHost преобразует каждое внешнее свойство Windows Forms в соответствующий эквивалент WPF.

Дополнительные сведения см. в разделе Сопоставление свойств Windows Forms и WPF.

Поведение

В приведенной ниже таблице описаны возможности взаимодействия.

Поведение Поддерживается Не поддерживается
Transparency Отрисовка элемента управления WPF поддерживает прозрачность. Фон родительского элемента управления Windows Forms может стать фоном вложенного элемента управления WPF. Неприменимо.
Многопоточность Поддерживаются все возможности многопоточности. И технология WPF, и технология Windows Forms предполагают однопоточную модель параллелизма. Во время отладки вызовы объектов платформы из других потоков будут вызывать исключение для принудительного выполнения этого требования.
Безопасность Все сценарии взаимодействия требуют полного доверия. Не допускаются сценарии взаимодействия с частичным доверием.
Специальные возможности Поддерживаются все сценарии специальных возможностей. Продукты вспомогательной технологии работают корректно, когда они используются для гибридных приложений, содержащих как элементы управления WPF, так и элементы управления Windows Forms. Неприменимо.
Буфер обмена Все операции с буфером обмена работают обычным образом. Сюда относятся операции вырезания и вставки между элементами управления WPF и Windows Forms. Неприменимо.
Функция перетаскивания Все операции перетаскивания работают обычным образом. Сюда входят операции между элементами управления Windows Forms и WPF. Неприменимо.

См. также