Пошаговое руководство. Сопоставление свойств с помощью элемента управления ElementHost
В этом пошаговом руководстве показано, как использовать PropertyMap свойства для сопоставления Windows Forms свойств с соответствующими свойствами вложенного WPF элемент.
В данном пошаговом руководстве представлены следующие задачи.
Создание проекта.
Определение нового сопоставления свойства.
Удаление сопоставления свойства по умолчанию.
Расширение сопоставления свойства по умолчанию.
Полный пример кода для задач, приведенных в этом пошаговом руководстве, см. в разделе сопоставления свойств с помощью пример элемента управления ElementHost.
Когда вы закончите, можно сопоставить Windows Forms свойств с соответствующими WPF свойства элемента.
Предварительные требования
Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.
- Visual Studio 2017
Создание проекта
Создание проекта
Создание приложения Windows Forms проект с именем
PropertyMappingWithElementHost
.В обозревателе решений, добавьте ссылки на следующие WPF сборок.
PresentationCore
PresentationFramework
WindowsBase
WindowsFormsIntegration
Скопируйте следующий код в верхнюю часть
Form1
файл кода.using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Forms.Integration;
Откройте
Form1
в конструкторе Windows Forms. Дважды щелкните форму, чтобы добавить обработчик событий для Load событий.Вернитесь к конструктору Windows Forms и добавьте обработчик событий для формы Resize событий. Дополнительные сведения см. в разделе Как Создание обработчиков событий с помощью конструктора.
Объявите ElementHost в
Form1
класса.ElementHost elemHost = null;
Определение новых сопоставлений свойств
ElementHost Элемент управления предоставляет несколько стандартных сопоставления свойств. Добавить новое сопоставление свойства путем вызова Add метод ElementHost элемента управления PropertyMap.
Для определения новых сопоставлений свойств
Скопируйте следующий код в определение
Form1
класса.// The AddMarginMapping method adds a new property mapping // for the Margin property. private void AddMarginMapping() { elemHost.PropertyMap.Add( "Margin", new PropertyTranslator(OnMarginChange)); } // The OnMarginChange method implements the mapping // from the Windows Forms Margin property to the // Windows Presentation Foundation Margin property. // // The provided Padding value is used to construct // a Thickness value for the hosted element's Margin // property. private void OnMarginChange(object h, String propertyName, object value) { ElementHost host = h as ElementHost; Padding p = (Padding)value; System.Windows.Controls.Button wpfButton = host.Child as System.Windows.Controls.Button; Thickness t = new Thickness(p.Left, p.Top, p.Right, p.Bottom ); wpfButton.Margin = t; }
AddMarginMapping
Метод добавляет новое сопоставление для Margin свойство.OnMarginChange
Метод преобразует Margin свойства WPF Margin свойство.Скопируйте следующий код в определение
Form1
класса.// The AddRegionMapping method assigns a custom // mapping for the Region property. private void AddRegionMapping() { elemHost.PropertyMap.Add( "Region", new PropertyTranslator(OnRegionChange)); } // The OnRegionChange method assigns an EllipseGeometry to // the hosted element's Clip property. private void OnRegionChange( object h, String propertyName, object value) { ElementHost host = h as ElementHost; System.Windows.Controls.Button wpfButton = host.Child as System.Windows.Controls.Button; wpfButton.Clip = new EllipseGeometry(new Rect( 0, 0, wpfButton.ActualWidth, wpfButton.ActualHeight)); } // The Form1_Resize method handles the form's Resize event. // It calls the OnRegionChange method explicitly to // assign a new clipping geometry to the hosted element. private void Form1_Resize(object sender, EventArgs e) { this.OnRegionChange(elemHost, "Region", null); }
AddRegionMapping
Метод добавляет новое сопоставление для Region свойство.OnRegionChange
Метод преобразует Region свойства WPF Clip свойство.Form1_Resize
Метод обрабатывает формы Resize событий и размеров области отсечения в соответствии с размещаемый элемент.
Удаление сопоставления свойства по умолчанию
Удаление сопоставления свойства по умолчанию путем вызова Remove метод ElementHost элемента управления PropertyMap.
Удаление сопоставления свойства по умолчанию
Скопируйте следующий код в определение
Form1
класса.// The RemoveCursorMapping method deletes the default // mapping for the Cursor property. private void RemoveCursorMapping() { elemHost.PropertyMap.Remove("Cursor"); }
RemoveCursorMapping
Метод удаляет сопоставление по умолчанию для Cursor свойство.
Расширение сопоставления свойства по умолчанию
Вы можете использовать сопоставление свойства по умолчанию, а также расширить его с помощью собственного сопоставления.
Расширение сопоставления свойства по умолчанию
Скопируйте следующий код в определение
Form1
класса.// The ExtendBackColorMapping method adds a property // translator if a mapping already exists. private void ExtendBackColorMapping() { if (elemHost.PropertyMap["BackColor"] != null) { elemHost.PropertyMap["BackColor"] += new PropertyTranslator(OnBackColorChange); } } // The OnBackColorChange method assigns a specific image // to the hosted element's Background property. private void OnBackColorChange(object h, String propertyName, object value) { ElementHost host = h as ElementHost; System.Windows.Controls.Button wpfButton = host.Child as System.Windows.Controls.Button; ImageBrush b = new ImageBrush(new BitmapImage( new Uri(@"file:///C:\WINDOWS\Santa Fe Stucco.bmp"))); wpfButton.Background = b; }
ExtendBackColorMapping
Метод добавляет пользовательский преобразователь свойств для существующего BackColor сопоставление свойств.OnBackColorChange
Метод присваивает определенное изображение для размещенного элемента управления Background свойство.OnBackColorChange
Метод вызывается после применения сопоставления свойства по умолчанию.
Инициализация сопоставлений свойств
Скопируйте следующий код в определение
Form1
класса.private void Form1_Load(object sender, EventArgs e) { // Create the ElementHost control. elemHost = new ElementHost(); elemHost.Dock = DockStyle.Fill; this.Controls.Add(elemHost); // Create a Windows Presentation Foundation Button element // and assign it as the ElementHost control's child. System.Windows.Controls.Button wpfButton = new System.Windows.Controls.Button(); wpfButton.Content = "Windows Presentation Foundation Button"; elemHost.Child = wpfButton; // Map the Margin property. this.AddMarginMapping(); // Remove the mapping for the Cursor property. this.RemoveCursorMapping(); // Add a mapping for the Region property. this.AddRegionMapping(); // Add another mapping for the BackColor property. this.ExtendBackColorMapping(); // Cause the OnMarginChange delegate to be called. elemHost.Margin = new Padding(23, 23, 23, 23); // Cause the OnRegionChange delegate to be called. elemHost.Region = new Region(); // Cause the OnBackColorChange delegate to be called. elemHost.BackColor = System.Drawing.Color.AliceBlue; }
Form1_Load
Метод обрабатывает Load событий и выполнения следующей инициализации.Создает WPF Button элемент.
Вызывает методы, ранее определенные в руководстве, для настройки сопоставлений свойств.
Присваивает начальные значения сопоставленным свойствам.
Нажмите клавишу F5, чтобы выполнить сборку приложения и запустить его.