Взаимодействие WPF и Windows Forms
WPF и Windows Forms представляют две различные архитектуры для создания интерфейсов приложений. System.Windows.Forms.Integration Пространство имен предоставляет классы, обеспечивающие общие сценарии взаимодействия. Ключевыми классами, реализующими возможности взаимодействия, WindowsFormsHost и ElementHost. В этом разделе описано, какие сценарии взаимодействия поддерживаются, а какие нет.
Note
Особое внимание уделено сценарию гибридного элемента управления. Гибридный элемент управления — это элемент управления на основе одной технологии, в который вложен элемент управления на основе другой технологии. Это также называется вложенным взаимодействием. В многоуровневом гибридном элементе управления более одного уровня вложения. Примером многоуровневого вложенного взаимодействия является элемент управления Windows Forms, который содержит элемент управления 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.
В него могут быть вложены один или несколько составных элементов управления.
С помощью 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. |
Переход по клавише 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 элемента управления. — При переходе по табуляции учитывается модель поведения элемента управления. Например, нажатие клавиши TAB в TextBox элемента управления, имеющего AcceptsTab значение свойства true вводит табуляции в текстовом поле вместо перемещения фокуса. |
Неприменимо. |
Переход с помощью клавиш со стрелками | — Ключи переход с помощью стрелки в 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. Можно предотвратить такое поведение путем переопределения Windows Forms элемента управления IsInputKey метода или обработки PreviewKeyDown событий. Вернуть true из IsInputKey метод, или установите для параметра PreviewKeyDownEventArgs.IsInputKey свойства true в вашей 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. |
Многопоточность | Поддерживаются все возможности многопоточности. | И технология 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. | Неприменимо. |
См. также
- ElementHost
- WindowsFormsHost
- Пошаговое руководство. Размещение элементов управления Windows Forms в WPF
- Пошаговое руководство. Размещение составного элемента управления Windows Forms в приложении WPF
- Пошаговое руководство. Размещение составного элемента управления WPF в форме Windows Forms
- Сопоставление свойств Windows Forms и WPF