Use windows form in wpf

Пошаговое руководство. Размещение элемента управления Windows Forms в приложении WPF с помощью XAML Walkthrough: Hosting a Windows Forms Control in WPF by Using XAML

WPF WPF предоставляет множество элементов управления с богатым набором функций. provides many controls with a rich feature set. Однако иногда может потребоваться использовать элементы управления Windows Forms на WPF WPF страницах. However, you may sometimes want to use Windows Forms controls on your WPF WPF pages. Например, у вас может быть существенный вклад в существующие элементы управления Windows Forms или имеется элемент управления Windows Forms, обеспечивающий уникальную функциональность. For example, you may have a substantial investment in existing Windows Forms controls, or you may have a Windows Forms control that provides unique functionality.

В этом пошаговом руководстве показано, как разместить System.Windows.Forms.MaskedTextBox элемент управления Windows Forms на WPF WPF странице с помощью XAML XAML . This walkthrough shows you how to host a Windows Forms System.Windows.Forms.MaskedTextBox control on a WPF WPF page by using XAML XAML .

Полный листинг кода задач, приведенных в этом пошаговом руководстве, см. в разделе Размещение элемента управления Windows Forms в WPF с помощью примера XAML. For a complete code listing of the tasks shown in this walkthrough, see Hosting a Windows Forms Control in WPF by Using XAML Sample.

Предварительные условия Prerequisites

Для выполнения шагов, описанных в этом руководстве, вам понадобится Visual Studio. You need Visual Studio to complete this walkthrough.

Размещение элемента управления Windows Forms Hosting the Windows Forms Control

Чтобы разместить элемент управления MaskedTextBox, выполните следующие действия. To host the MaskedTextBox control

Создайте проект приложения WPF с именем HostingWfInWpfWithXaml . Create a WPF Application project named HostingWfInWpfWithXaml .

Добавьте ссылки на следующие сборки. Add references to the following assemblies.

Откройте файл MainWindow. XAML в конструкторе WPF. Open MainWindow.xaml in the WPF Designer.

В Window элементе добавьте следующее сопоставление пространства имен. In the Window element, add the following namespace mapping. wf Сопоставление пространства имен устанавливает ссылку на сборку, содержащую элемент управления Windows Forms. The wf namespace mapping establishes a reference to the assembly that contains the Windows Forms control.

В Grid элементе добавьте следующий код XAML. In the Grid element add the following XAML.

MaskedTextBoxЭлемент управления создается в качестве дочернего элемента для WindowsFormsHost элемента управления. The MaskedTextBox control is created as a child of the WindowsFormsHost control.

Нажмите клавишу F5, чтобы создать и запустить приложение. Press F5 to build and run the application.

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

WPF WPF и Windows Forms представляют две разные архитектуры для создания интерфейсов приложений. and Windows Forms present two different architectures for creating application interfaces. System.Windows.Forms.IntegrationПространство имен предоставляет классы, обеспечивающие общие сценарии взаимодействия. The System.Windows.Forms.Integration namespace provides classes that enable common interoperation scenarios. Двумя ключевыми классами, реализующими возможности взаимодействия, являются WindowsFormsHost и ElementHost . The two key classes that implement interoperation capabilities are WindowsFormsHost and ElementHost. В этом разделе описано, какие сценарии взаимодействия поддерживаются, а какие нет. This topic describes which interoperation scenarios are supported and which scenarios are not supported.

Особое внимание уделено сценарию гибридного элемента управления. Special consideration is given to the hybrid control scenario. Гибридный элемент управления — это элемент управления на основе одной технологии, в который вложен элемент управления на основе другой технологии. A hybrid control has a control from one technology nested in a control from the other technology. Это также называется вложенным взаимодействием. This is also called a nested interoperation. В многоуровневом гибридном элементе управления более одного уровня вложения. A multilevel hybrid control has more than one level of hybrid control nesting. Примером многоуровневого вложенной операции является элемент управления Windows Forms, содержащий WPF WPF элемент управления, который содержит другой элемент управления Windows Forms. An example of a multilevel nested interoperation is a Windows Forms control that contains a WPF WPF control, which contains another Windows Forms control. Многоуровневые гибридные элементы управления не поддерживаются. Multilevel hybrid controls are not supported.

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

При размещении элемента управления Windows Forms поддерживаются следующие сценарии взаимодействия WPF WPF : The following interoperation scenarios are supported when a WPF WPF control hosts a Windows Forms control:

WPF WPF Элемент управления может содержать один или несколько элементов управления Windows Forms с помощью XAML. The WPF WPF control may host one or more Windows Forms controls using XAML.

В нем может размещаться один или несколько элементов управления Windows Forms с помощью кода. It may host one or more Windows Forms controls using code.

В нем могут размещаться Windows Forms контейнерные элементы управления, которые содержат другие элементы управления Windows Forms. It may host Windows Forms container controls that contain other Windows Forms controls.

В ней может размещаться форма «основной/подробности WPF WPF » с главным и Windows Forms сведениями. It may host a master/detail form with a WPF WPF master and Windows Forms details.

В нем может размещаться форма «основной/подробности» с Windows Forms главным и WPF WPF подробными сведениями. It may host a master/detail form with a Windows Forms master and WPF WPF details.

Читайте также:  Чем хороша mac os 2020

В ней может размещаться один или несколько элементов управления ActiveX. It may host one or more ActiveX controls.

В него могут быть вложены один или несколько составных элементов управления. It may host one or more composite controls.

С помощью Язык XAML Extensible Application Markup Language (XAML) в него могут быть вложены гибридные элементы управления. It may host hybrid controls using Язык XAML Extensible Application Markup Language (XAML) .

С помощью кода в него могут быть вложены гибридные элементы управления. It may host hybrid controls using code.

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

В следующем списке описаны известные ограничения при WindowsFormsHost попытке элемента интегрировать элемент управления, размещенный Windows Forms, в WPF WPF систему макета. The following list describes the known limitations when the WindowsFormsHost element attempts to integrate its hosted Windows Forms control into the WPF WPF layout system.

В некоторых случаях размеры элементов управления Windows Forms не могут изменяться или их размер можно изменять только до определенных размеров. In some cases, Windows Forms controls cannot be resized, or can be sized only to specific dimensions. Например, ComboBox элемент управления Windows Forms поддерживает только одну высоту, которая определяется размером шрифта элемента управления. For example, a Windows Forms ComboBox control supports only a single height, which is defined by the control’s font size. В WPF WPF динамическом макете, в котором предполагается, что элементы могут растягиваться вертикально, размещаемый ComboBox элемент управления не будет растягиваться должным образом. In a WPF WPF dynamic layout, which assumes that elements can stretch vertically, a hosted ComboBox control will not stretch as expected.

Элементы управления Windows Forms нельзя поворачивать или расклонять. Windows Forms controls cannot be rotated or skewed. Например, при повороте пользовательского интерфейса на 90 градусов размещаемые элементы управления Windows Forms будут поддерживать свое вертикальное расположение. For example, when you rotate your user interface by 90 degrees, hosted Windows Forms controls will maintain their upright position.

В большинстве случаев Windows Forms элементы управления не поддерживают пропорциональное масштабирование. In most cases, Windows Forms controls do not support proportional scaling. Несмотря на то, что общий размер элемента управления масштабируется, дочерние элементы управления и компоненты элемента управления могут изменять размеры не так, как ожидается. Although the overall dimensions of the control will scale, child controls and component elements of the control may not resize as expected. Это ограничение зависит от того, насколько хорошо каждый элемент управления Windows Forms поддерживает масштабирование. This limitation depends on how well each Windows Forms control supports scaling.

В пользовательском интерфейсе WPF WPF можно изменить z-порядок элементов для контроля поведения перекрывания. In a WPF WPF user interface, you can change the z-order of elements to control overlapping behavior. Размещенный элемент управления Windows Forms рисуется в отдельном HWND, поэтому он всегда рисуется поверх WPF WPF элементов. A hosted Windows Forms control is drawn in a separate HWND, so it is always drawn on top of WPF WPF elements.

Windows Forms элементы управления поддерживают автомасштабирование на основе размера шрифта. Windows Forms controls support autoscaling based on the font size. В пользовательском интерфейсе WPF WPF изменение размера шрифта не влечет за собой изменение размера всего макета, хотя отдельные элементы могут динамически изменять размер. In a WPF WPF user interface, changing the font size does not resize the entire layout, although individual elements may dynamically resize.

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

Некоторые свойства окружения WPF WPF элементов управления имеют Windows Forms эквиваленты. Some of the ambient properties of WPF WPF controls have Windows Forms equivalents. Эти внешние свойства распространяются на размещенные элементы управления Windows Forms и предоставляются как общие свойства WindowsFormsHost элемента управления. These ambient properties are propagated to the hosted Windows Forms controls and exposed as public properties on the WindowsFormsHost control. WindowsFormsHostЭлемент управления преобразует каждое WPF WPF внешнее свойство в его Windows Forms эквивалент. The WindowsFormsHost control translates each WPF WPF ambient property into its Windows Forms equivalent.

Поведение Behavior

В приведенной ниже таблице описаны возможности взаимодействия. The following table describes interoperation behavior.

Поведение Behavior Поддерживается Supported Не поддерживается Not supported
Прозрачность Transparency Отрисовка Windows Forms элемента управления поддерживает прозрачность. Windows Forms control rendering supports transparency. Фон родительского WPF WPF элемента управления может стать фоном размещенных Windows Forms элементов управления. The background of the parent WPF WPF control can become the background of hosted Windows Forms controls. Некоторые элементы управления Windows Forms не поддерживают прозрачность. Some Windows Forms controls do not support transparency. Например, TextBox ComboBox элементы управления и не будут прозрачными при размещении в WPF WPF . For example, the TextBox and ComboBox controls will not be transparent when hosted by WPF WPF .
Переход по клавише TAB Tabbing Порядок табуляции для размещенных Windows Forms элементов управления аналогичен порядку, когда эти элементы управления размещаются в приложении на основе Windows Forms. Tab order for hosted Windows Forms controls is the same as when those controls are hosted in a Windows Forms-based application.

Переход от WPF WPF элемента управления к Windows Forms элементу управления с клавишей TAB и Shift + Tab работает как обычно. Tabbing from a WPF WPF control to a Windows Forms control with the TAB key and SHIFT+TAB keys works as usual.

Windows Forms элементы управления, имеющие TabStop значение свойства, false не получают фокус при использовании вкладок пользователя через элементы управления. Windows Forms controls that have a TabStop property value of false do not receive focus when the user tabs through controls.

— Каждый WindowsFormsHost элемент управления имеет TabIndex значение, определяющее, когда этот WindowsFormsHost элемент управления будет получать фокус. — Each WindowsFormsHost control has a TabIndex value, which determines when that WindowsFormsHost control will receive focus.
-Windows Forms элементы управления, содержащиеся в WindowsFormsHost контейнере, следуют порядку, указанному TabIndex свойством. — Windows Forms controls that are contained inside a WindowsFormsHost container follow the order specified by the TabIndex property. При переходе от последнего индекса табуляции фокус получает следующий элемент управления WPF WPF , если таковой существует. Tabbing from the last tab index puts focus on the next WPF WPF control, if one exists. Если других элементов управления с фокусом не WPF WPF существует, переход к первому элементу управления Windows Forms в последовательности табуляции. If no other focusable WPF WPF control exists, tabbing returns to the first Windows Forms control in the tab order.
— TabIndex значения элементов управления внутри WindowsFormsHost относятся к родственному элементу Windows Forms элементам управления, содержащимся в WindowsFormsHost элементе управления. — TabIndex values for controls inside the WindowsFormsHost are relative to sibling Windows Forms controls that are contained in the WindowsFormsHost control.
— При переходе по табуляции учитывается модель поведения элемента управления. — Tabbing honors control-specific behavior. Например, при нажатии клавиши TAB в TextBox элементе управления со AcceptsTab значением свойства вместо true перемещения фокуса в текстовое поле будет введена вкладка. For example, pressing the TAB key in a TextBox control that has a AcceptsTab property value of true enters a tab in the text box instead of moving the focus.

Не применяется Not applicable.
Переход с помощью клавиш со стрелками Navigation with arrow keys -Навигация с помощью клавиш со стрелками в WindowsFormsHost элементе управления аналогична обычной Windows Forms контейнерному элементу управления: стрелка вверх и клавиши со стрелками влево выбирают предыдущий элемент управления, а стрелка вниз и клавиша со стрелкой вправо — выбор следующего элемента управления. — Navigation with arrow keys in the WindowsFormsHost control is the same as in an ordinary Windows Forms container control: The UP ARROW and LEFT ARROW keys select the previous control, and the DOWN ARROW and RIGHT ARROW keys select the next control.
— Клавиши Стрелка вверх и стрелка влево из первого элемента управления, содержащегося в WindowsFormsHost элементе управления, выполняют то же действие, что и сочетание клавиш SHIFT + TAB. — The UP ARROW and LEFT ARROW keys from the first control that is contained in the WindowsFormsHost control perform the same action as the SHIFT+TAB keyboard shortcut. Если имеется контроль с фокусом WPF WPF , фокус перемещается за пределы WindowsFormsHost элемента управления. If there is a focusable WPF WPF control, focus moves outside the WindowsFormsHost control. Это поведение отличается от стандартного ContainerControl поведения в том, что переход к последнему элементу управления не выполняется. This behavior differs from the standard ContainerControl behavior in that no wrapping to the last control occurs. Если других элементов управления с фокусом не WPF WPF существует, фокус возвращается к последнему Windows Forms элементу управления в последовательности табуляции. If no other focusable WPF WPF control exists, focus returns to the last Windows Forms control in the tab order.
— Стрелка вниз и клавиши со СТРЕЛКАми вправо от последнего элемента управления, содержащегося в WindowsFormsHost элементе управления, выполняют то же действие, что и клавиша TAB. — The DOWN ARROW and RIGHT ARROW keys from the last control that is contained in the WindowsFormsHost control perform the same action as the TAB key. Если имеется контроль с фокусом WPF WPF , фокус перемещается за пределы WindowsFormsHost элемента управления. If there is a focusable WPF WPF control, focus moves outside the WindowsFormsHost control. Это поведение отличается от стандартного ContainerControl поведения в том случае, если не выполняется перенос в первый элемент управления. This behavior differs from the standard ContainerControl behavior in that no wrapping to the first control occurs. Если других элементов управления с фокусом не WPF WPF существует, фокус возвращается к первому элементу управления Windows Forms в последовательности табуляции. If no other focusable WPF WPF control exists, focus returns to the first Windows Forms control in the tab order.
Не применяется Not applicable.
Клавиши быстрого доступа Accelerators Клавиши быстрого доступа работают как обычно, за исключением пунктов, оговоренных в столбце «Не поддерживается». Accelerators work as usual, except where noted in the «Not supported» column. Повторяющиеся в различных технологиях клавиши быстрого доступа не работают как обычные повторяющиеся клавиши быстрого доступа. Duplicate accelerators across technologies do not work like ordinary duplicate accelerators. При дублировании ускорителя между технологиями по крайней мере один элемент управления Windows Forms, а другой — элемент управления WPF WPF Windows Forms всегда получает ускоритель. When an accelerator is duplicated across technologies, with at least one on a Windows Forms control and the other on a WPF WPF control, the Windows Forms control always receives the accelerator. Фокус не переключается между элементами управления с одинаковыми клавишами быстрого доступа. Focus does not toggle between the controls when the duplicate accelerator is pressed.
Сочетания клавиш Shortcut keys Сочетания клавиш работают как обычно, за исключением пунктов, оговоренных в столбце «Не поддерживается». Shortcut keys work as usual, except where noted in the «Not supported» column. — Windows Forms сочетания клавиш, которые обрабатываются на этапе предварительной обработки, всегда имеют приоритет над WPF WPF сочетаниями клавиш. — Windows Forms shortcut keys that are handled at the preprocessing stage always take precedence over WPF WPF shortcut keys. Например, если у вас есть ToolStrip элемент управления с назначенными сочетаниями клавиш Ctrl + s и имеется WPF WPF команда, привязанная к Ctrl + s, то ToolStrip обработчик элемента управления всегда вызывается первым, независимо от фокуса. For example, if you have a ToolStrip control with CTRL+S shortcut keys defined, and there is a WPF WPF command bound to CTRL+S, the ToolStrip control handler is always invoked first, regardless of focus.
— Windows Forms сочетания клавиш, которые обрабатываются KeyDown событием, обрабатываются последними в WPF WPF . — Windows Forms shortcut keys that are handled by the KeyDown event are processed last in WPF WPF . Это поведение можно предотвратить, переопределив метод элемента управления Windows Forms IsInputKey или обрабатывая PreviewKeyDown событие. You can prevent this behavior by overriding the Windows Forms control’s IsInputKey method or handling the PreviewKeyDown event. Вернитесь true из IsInputKey метода или задайте PreviewKeyDownEventArgs.IsInputKey для свойства значение true в PreviewKeyDown обработчике событий. Return true from the IsInputKey method, or set the value of the PreviewKeyDownEventArgs.IsInputKey property to true in your PreviewKeyDown event handler.
AcceptsReturn, AcceptsTab и другие специфические свойства элементов управления AcceptsReturn, AcceptsTab, and other control-specific behavior Свойства, изменяющие поведение клавиатуры по умолчанию, работают обычным образом, предполагая, что элемент управления Windows Forms переопределяет IsInputKey метод для возврата true . Properties that change the default keyboard behavior work as usual, assuming that the Windows Forms control overrides the IsInputKey method to return true . Windows Forms элементы управления, изменяющие поведение клавиатуры по умолчанию путем обработки KeyDown события, обрабатываются последними в WPF WPF элементе управления ведущего приложения. Windows Forms controls that change default keyboard behavior by handling the KeyDown event are processed last in the host WPF WPF control. Так как эти элементы управления обрабатываются последними, они могут привести к непредвиденному поведению. Because these controls are processed last, they can produce unexpected behavior.
События Enter и Leave Enter and Leave Events Если фокус не переходит на вмещающий ElementHost элемент управления, события Enter и Leave создаются обычным образом при изменении фокуса в одном WindowsFormsHost элементе управления. When focus is not going to the containing ElementHost control, the Enter and Leave events are raised as usual when focus changes in a single WindowsFormsHost control. События Enter и Leave не вызываются при следующих переводах фокуса: Enter and Leave events are not raised when the following focus changes occur:

— Из внутри в, за пределами WindowsFormsHost элемента управления. — From inside to outside a WindowsFormsHost control.
— С внешней стороны до WindowsFormsHost элемента управления. — From outside to inside a WindowsFormsHost control.
— За пределами WindowsFormsHost элемента управления. — Outside a WindowsFormsHost control.
— Из элемента управления Windows Forms, размещенного в WindowsFormsHost элементе управления, в ElementHost элементе управления, размещенном внутри того же объекта WindowsFormsHost . — From a Windows Forms control hosted in a WindowsFormsHost control to an ElementHost control hosted inside the same WindowsFormsHost.

Многопоточность Multithreading Поддерживаются все возможности многопоточности. All varieties of multithreading are supported. Как для Windows Forms, так и для WPF WPF технологий предполагается однопотоковая модель параллелизма. Both the Windows Forms and WPF WPF technologies assume a single-threaded concurrency model. Во время отладки вызовы объектов платформы из других потоков будут вызывать исключение для принудительного выполнения этого требования. During debugging, calls to framework objects from other threads will raise an exception to enforce this requirement.
Безопасность Security Все сценарии взаимодействия требуют полного доверия. All interoperation scenarios require full trust. Не допускаются сценарии взаимодействия с частичным доверием. No interoperation scenarios are allowed in partial trust.
Специальные возможности Accessibility Поддерживаются все сценарии специальных возможностей. All accessibility scenarios are supported. Продукты с поддержкой специальных возможностей правильно работают, если они используются для гибридных приложений, содержащих как Windows Forms, так и WPF WPF элементы управления. Assistive technology products function correctly when they are used for hybrid applications that contain both Windows Forms and WPF WPF controls. Не применяется Not applicable.
Буфер обмена Clipboard Все операции с буфером обмена работают обычным образом. All Clipboard operations work as usual. Сюда входит Вырезание и вставление между Windows Forms и WPF WPF элементами управления. This includes cutting and pasting between Windows Forms and WPF WPF controls. Не применяется Not applicable.
Функция перетаскивания Drag-and-drop feature Все операции перетаскивания работают обычным образом. All drag-and-drop operations work as usual. Сюда входят операции между Windows Forms и WPF WPF элементами управления. This includes operations between Windows Forms and WPF WPF controls. Не применяется Not applicable.

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

При размещении элемента управления Windows Forms поддерживаются следующие сценарии взаимодействия WPF WPF : The following interoperation scenarios are supported when a Windows Forms control hosts a WPF WPF control:

Вложение одного или нескольких элементов управления WPF WPF с помощью кода. Hosting one or more WPF WPF controls using code.

Связывание страницы свойств с одним или несколькими вложенными элементами управления WPF WPF . Associating a property sheet with one or more hosted WPF WPF controls.

Вложение одной или нескольких страниц WPF WPF в форму. Hosting one or more WPF WPF pages in a form.

Запуск окна WPF WPF . Starting a WPF WPF window.

Размещение формы «основной/подробности» с Windows Forms главным и WPF WPF подробными сведениями. Hosting a master/detail form with a Windows Forms master and WPF WPF details.

Читайте также:  Linux когда создана папка
Оцените статью