#011 Размещение элемента WPF на форме NET 2.0
Данная статья завершает наше введение в технологии объединения приложений WPF и .NET 2.0. Обязательно изучите начальный материал статей № 009 и 010, иначе вы не сможете выполнить задание этой статьи.
Создайте проект на базе .NET 2.0 типа Windows Application и задайте ему имя "MyWPFhost".
Добавьте к решению новый проект типа WinFX Custom Control Library и задайте ему имя MyWPFelement
Отредактируйте файл UserControl1.xaml , чтобы он приобрел следующий вид:
<UserControl x:Class="UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<UserControl.Background >
<SolidColorBrush x:Name="MySolidColorBrush" Color="Green" />
</UserControl.Background>
<UserControl.Triggers>
<EventTrigger RoutedEvent="UserControl.Loaded">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="MySolidColorBrush"
Storyboard.TargetProperty="Color"
From="Green" To="Blue" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</UserControl.Triggers>
</UserControl>
Все что будет делать наш контрол - это менять свой цвет. Для этого мы использовали тип анимации ColorAnimation (подробнее см. статью № 005)
Перекомпилируйте проект (меню Build-> Rebuild Solution)
Теперь щелкните правой кнопкой по названию проекта MyWpfHost и выберите команду Add Reference. В появившемся окне перейдите на вкладку Projects и дважды щелкните по строке MyWpfElement.
Перекомпилируйте проект (меню Build-> Rebuild Solution)
Щелкните правой кнопкой по названию первого проекта MyWpfHost и выберите команду Properties, чтобы отредактировать свойства проекта.
При помощи кнопки Add добавьте ссылки на следующие библиотеки (на вкладке .NET):
WindowsFormsIntegration
PresentationCore
PresentationFramework
Перекомпилируйте проект (меню Build-> Rebuild Solution)
Если у вас возникли проблемы по выполнению этой части, обратитесь к статье № 010 за подробными инструкциями.
Теперь давайте разместим наш элемент UserControl1 на форме Form1 нашего .NET 2.0 приложения. Для этого отредактируйте код формы:
Imports System.Windows.Forms.Integration
Public Class Form1
Dim myWpfControl As MyWPFelement.UserControl1
Dim myHost As ElementHost
End Class
Строка Imports включает библиотеку WindowsFormsIntegration в пространство имен нашего проекта. Именно эта библиотека содержит особый контрол ElementHost предназначенный для размещения на формах .NET 2.0 - он служит для отображения контента Avalon ! Поэтому мы создаем два объекта - первый myWpfControl ссылается на наш контрол UserControl1 , и второй myHost создает экземпляр контрола ElementHost.
Отредактируем событие Form_Load нашей формы:
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
myHost = New ElementHost
myHost.Dock = DockStyle.Fill
myWpfControl = New MyWPFelement.UserControl1
myWpfControl.InitializeComponent()
myHost.Child = myWpfControl
Me.Controls.Add(myHost)
End Sub
Думаю вы без труда разберетесь с приведенным выше кодом. Запустите проект и убедитесь, что теперь на нашей .NET 2.0 форме размещен самый настоящий WPF элемент… и мало того - чувствует себя там прекрасно!
Полный листинг программы:
Проект 1 - MyWPFhost
VB-листинг:
Imports System.Windows.Forms.Integration
Public Class Form1
Dim myWpfControl As MyWPFelement.UserControl1
Dim myHost As ElementHost
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
myHost = New ElementHost
myHost.Dock = DockStyle.Fill
myWpfControl = New MyWPFelement.UserControl1
myWpfControl.InitializeComponent()
myHost.Child = myWpfControl
Me.Controls.Add(myHost)
End Sub
End Class
Проект 2 - MyWPFelement
XAML-листинг:
<UserControl x:Class="UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<UserControl.Background >
<SolidColorBrush x:Name="MySolidColorBrush" Color="Green" />
</UserControl.Background>
<UserControl.Triggers>
<EventTrigger RoutedEvent="UserControl.Loaded">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="MySolidColorBrush"
Storyboard.TargetProperty="Color"
From="Green" To="Blue" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</UserControl.Triggers>
</UserControl>
Июль, 2006
По теме
- Создаем контекстно-зависимое WPF-приложение
- #024 – Знакомство с WPF/E
- #023 – Введение в WPF, reloaded…
- #022 Введение в Microsoft Interactive Designer RC1
- #021 Применение 3D в WPF - Часть 2
- #020 Применение 3D в WPF - Часть 1
- #019 Введение в возможности 3D на WPF
- #018 Размещение контрола NET 2.0 на форме WPF
- #017 Первое Web-приложение / Подробнее о Grid / Элемент Frame
- #016 EXE, XBAP, XAML? - Все равно!