Программирование >>  Расширенный wf 

1 ... 11 12 13 [ 14 ] 15


Интеграция с Windows Forms

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

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


Элементы управления WPF в приложениях Windows Forms

Вы можете использовать элементы управления WPF внутри приложения Windows Forms. WPF-элемент - это нормальный класс .NET. Однако вы не можете использовать его напрямую из кода Windows Forms; элемент управления WPF не является элементом управления Windows Forms. Интеграция может быть осуществлена с применением класса-оболочки ElementHost из пространства имен System.Windows.Forms. Integration. Класс ElementHost - это элемент управления Windows Forms, поскольку он унаследован от System.Windows.Forms.Control и может использоваться подобно любому другому элементу управления Windows Forms в приложении Windows Forms. ElementHost принимает и управляет элементами управления WPF.

Начнем с простейшего элемента управления WPF. С помощью Visual Studio 2008 вы можете создать библиотеку WPF User Control Library. Наш пример элемента управления унаследован от базового класса UserControl и содержит сетку (grid) и кнопку со специальным содержимым.

<UserControl x:Class= WPFControl.UserControl1

xmlns= http: schemas.microsoft.com/winfx/2 00 6/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2 006/xaml > <Grid> <Button>

<Canvas Height= 230 Width= 230 >

<Ellipse Canvas.Left= 50 Canvas.Top= 50 Width= 100 Height= 100

Stroke= Blue StrokeThickness= 4 Fill= Yellow /> <Ellipse Canvas.Left= 60 Canvas.Top= 65 Width= 25 Height= 25

Stroke= Blue StrokeThickness= 3 Fill= White />

<Ellipse Canvas.Left= 70 Canvas.Top= 75 Width= 5 Height= 5 Fill= Black /> <Path Name= mouth Stroke= Blue StrokeThickness= 4

Data= M 62,125 Q 95,122 102,108 /> <Line X1= 124 X2= 132 Y1= 144 Y2= 166 Stroke= Blue StrokeThickness= 4 /> <Line X1= 114 X2= 133 Y1= 169 Y2= 166 Stroke= Blue StrokeThickness= 4 />

<Line X1= 92 X2= 82 Y1= 146 Y2= 168 Stroke= Blue StrokeThickness= 4 /> <Line X1= 68 X2= 83 Y1= 160 Y2= 168 Stroke= Blue StrokeThickness= 4 />

</Canvas>

</Button> </Grid>

</UserControl>



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

Внутри сгенерированного дизайнером кода вы найдете переменную, ссылающуюся на пользовательский элемент WPF и объект типа ElementHost, который служит для него оболочкой:

private System.Windows.Forms.Integration.ElementHost elementHost1; private WPFControl.UserControl1 userControl11;

В методе InitializeComponent вы можете видеть инициализацию объекта и присвоение экземпляра элемента управления WPF свойству Child класса ElementHost:

private void InitializeComponent()

this.elementHost1 = new

System.Windows.Forms.Integration.ElementHost();

this.userControl11 = new WPFControl.UserControl1();

this.SuspendLayout();

elementHost1

this.elementHost1.Location = new System.Drawing.Point(39, 44); this.elementHost1.Name = elementHost1 ;

this.elementHost1.Size = new System.Drawing.Size(259, 229);

this.elementHost1.TabIndex = 0; this.elementHost1.Text = elementHost1 ; this.elementHost1.Child = this.userControl11;

...

Запустив это приложение Windows Forms, вы увидите рядом внутри формы элемент управления WPF и обычный элемент управления Windows Forms, как показано на рис. 35.28.

Конечно же, вы можете добавлять методы, свойства и события в элемент управления WPF и использовать их точно так же, как и во всех других элементах управления.

Элементы управления Windows Forms в приложениях WPF

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

управления WPF внутри приложения Windows Forms, здесь вам также понадобится класс, позволяющий поместить элемент управления Windows Forms в среду приложения WPF. Этот класс называется WindowsFormsHost и находится он в той же сборке WindowsFormsIntegration. Класс WindowsFormsHost унаследован от базовых классов HwndHost и FrameworkElement, а потому может быть использован как элемент WPF.


Рис. 35.28. Пример применения элементов управления WPF в приложении Windows Forms



Для такой интеграции сначала создается библиотека Windows Control Library. Добавьте элементы TextBox и Button к форме, используя визуальный дизайнер. Чтобы изменить свойство Text кнопки, в отделенный код добавляется свойство

ButtonText:

public partial class UserControl1 : UserControl

public UserControl1()

InitializeComponent();

public string ButtonText

get { return button1.Text; } set { button1.Text = value; }

В приложении WPF вы можете добавить объект WindowsFormsHost из панели инструментов дизайнера. Это добавит ссылки на сборки WindowsFormslntegration, System.Windows.Forms, а также на сборку элемента управления Windows Forms. Чтобы использовать элемент управления Windows Forms из XAML, вам нужно добавить псевдоним пространства имен XML, ссылающийся на пространство имен .NET. Поскольку сборка, содержащая элемент управления Windows Forms, находится отдельно от сборки приложения WPF, вы также должны добавить имя сборки в псевдоним пространства имен. Элемент управления Windows Forms теперь может содержаться внутри элемента WindowsFormsHost, как показано ниже. Вы можете присвоить значение свойству ButtonText непосредственно из XAML, подобно элементам .NET.

<Window x:Class= WPFApplication.Window1

xmlns= http: schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2006/xaml

xmlns:winforms= clr-namespace:Wrox.ProCSharp.WPF;assembly=WindowsFormsControl Title= WPF Interop Application Height= 300 Width= 300

>

<Grid>

<Grid.RowDefinitions>

<RowDefinition />

<RowDefinition /> </Grid.RowDefinitions>

<WindowsFormsHost Grid.Row= 0 Height= 180 >

<winforms:UserControl1 x:Name= myControl ButtonText= Click Me! /> </WindowsFormsHost>

<StackPanel Grid.Row= 1 > <TextBox Margin= 5,5,5,5 Height= 30 ></TextBox> <Button Margin= 5,5,5,5

WPF Button</Button> </StackPanel> </Grid> </Window>

Width= 140

Width= 80 Height= 40 >

На рис. 35.29 показано, как выглядит приложение WPF. Разумеется, элемент управления Windows Forms по-прежнему выглядит как элемент управления Windows Forms и не обладает возможностями изменения размеров и стилизации, которые предоставляет WPF.


Рис. 35.29. Пример применения элементов управления Windows Forms в приложении WPF



1 ... 11 12 13 [ 14 ] 15

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика