Поделиться через


Взаимодействие 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 в WPF

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

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

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

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

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

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

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

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

  • С помощью Extensible Application Markup Language (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.

Поведение

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

Поведение

Поддерживается

Не поддерживаются

Прозрачность

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

Некоторые элементы управления Windows Forms не поддерживает прозрачность. Например, элементы управления TextBox и ComboBox не будут прозрачными при вложении в WPF.

Переход по клавише табуляции

Последовательность перехода для вложенных элементов управления Windows Forms та же, что и при вложении этих элементов управления в приложение, основанное на Windows Forms.

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

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

  • Каждый элемент управления WindowsFormsHost имеет значение TabIndex, которое определяет, когда данный элемент управления WindowsFormsHost получит фокус.

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

  • Значения TabIndex для элементов управления в WindowsFormsHost устанавливаются по отношению к родственным элементам управления Windows Forms, содержащимся в элементе управления WindowsFormsHost.

  • Переход по табуляции осуществляется и по специальным моделям поведения элементов управления. Например, нажатие клавиши TAB в элементе управления 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 и есть команда WPF, привязанная к CTRL+S, первым всегда вызывается обработчик элементов управления ToolStrip, независимо от фокуса.

  • Горячие клавиши Windows Forms, обрабатываемые событием KeyDown, в WPF обрабатываются последними. Можно предотвратить такое поведение путем переопределения метода IsInputKey элемента управления Windows Forms или путем обработки события PreviewKeyDown. Возвращайте значение true в методе IsInputKey, или задайте свойству PreviewKeyDownEventArgs.IsInputKey значение true в вашем обработчике событий PreviewKeyDown.

AcceptsReturn AcceptsTab и другие специфические свойства элементов управления

Свойства, изменяющие стандартное поведение клавиатуры обычным образом, причем предполагается, что элемент управления Windows Forms переопределяет метод IsInputKey так, чтобы он возвращал true.

Элементы управления Windows Forms, изменяющие стандартное поведение клавиатуры при обработке событий KeyDown, обрабатываются во вложенном элементе управления WPF последними. Поскольку эти элементы управления обрабатываются последними, они могут привести к непредвиденному поведению.

События Enter и Leave

Если фокус не устанавливается на элемент управления, содержащий ElementHost, при смене фокуса в одном элементе управления WindowsFormsHost обычно вызываются события Enter и Leave.

События Enter и Leave не вызываются при следующем изменении фокуса:

  • Изнутри элемента управления WindowsFormsHost наружу.

  • Снаружи элемента управления WindowsFormsHost внутрь.

  • За пределами элемента управления WindowsFormsHost.

  • Из элемента управления Windows Forms, вложенного в элемент управления WindowsFormsHost на элемент управления ElementHost, вложенный в тот же WindowsFormsHost.

Многопоточность

Поддерживаются все возможности многопоточности.

И технология Windows Forms, и технология WPF предполагают однопоточную модель одновременного выполнения. Во время отладки вызовы объектов структуры из других потоков будут вызывать исключение для принудительного выполнения этого требования.

Безопасность

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

Не допускаются сценарии взаимодействия с частичным доверием.

Специальные возможности

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

Неприменимо.

Буфер обмена

Все операции буфера обмена работают обычным образом. Сюда входят вырезания и вставки между элементами управления Windows Forms и WPF.

Неприменимо.

Функция перетаскивания

Все операции перетаскивания работают обычным образом. Сюда входят операции между элементами управления 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.

Поведение

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

Поведение

Поддерживается

Не поддерживаются

Прозрачность

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

Неприменимо.

Многопоточность

Поддерживаются все возможности многопоточности.

И технология Windows Forms, и технология WPF предполагают однопоточную модель одновременного выполнения. Во время отладки вызовы объектов структуры из других потоков будут вызывать исключение для принудительного выполнения этого требования.

Безопасность

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

Не допускаются сценарии взаимодействия с частичным доверием.

Специальные возможности

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

Неприменимо.

Буфер обмена

Все операции буфера обмена работают обычным образом. Сюда входят вырезания и вставки между элементами управления Windows Forms и WPF.

Неприменимо.

Функция перетаскивания

Все операции перетаскивания работают обычным образом. Сюда входят операции между элементами управления Windows Forms и WPF.

Неприменимо.

См. также

Задачи

Пошаговое руководство. Размещение элемента управления Windows Forms в приложении WPF

Ссылки

ElementHost

WindowsFormsHost

Основные понятия

Пошаговое руководство. Размещение составного элемента управления Windows Forms в приложении WPF

Пошаговое руководство. Размещение составного элемента управления WPF в форме Windows Forms

Сопоставление свойств Windows Forms и WPF