Пошаговое руководство. Размещение составного элемента управления Windows Forms в приложении WPF
Клиент Windows Presentation Foundation (WPF) предоставляет среду с широкими возможностями для создания приложений. Однако при создании сложного кода Windows Forms более эффективно использовать по крайней мере часть этого кода повторно в приложении WPF вместо того, чтобы переписывать его заново. Наиболее распространенной ситуацией является наличие элементов управления Windows Forms. В некоторых случаях доступ к исходному коду этих элементов управления может даже отсутствовать. WPF предоставляет простую процедуру для размещения таких элементов управления в приложении WPF. Например, можно использовать WPF в значительной части программирования при размещении специализированных элементов управления DataGridView.
В данном пошаговом руководстве создается приложение, в котором содержится составной элемент управления Windows Forms для поддержки ввода данных в WPF. Составной элемент управления упакован в библиотеку DLL. Эта общая процедура может быть расширена для более сложных приложений и элементов управления. Это пошаговое руководство почти идентично повторяет свойства и функциональные возможности, описанные в разделе Пошаговое руководство. Размещение составного элемента управления WPF в форме Windows Forms. Основным различием является то, что скрипт размещения выполняется в обратном порядке.
Данное пошаговое руководство разделено на два раздела. В первом разделе кратко описывается реализация составного элемента управления Windows Forms. Во втором разделе подробно рассматривается размещение составного элемента управления в приложении WPF, получение событий из элемента управления и доступ к некоторым свойствам элемента управления.
В этом пошаговом руководстве демонстрируется выполнение следующих задач.
Реализация составного элемента управления Windows Forms.
Реализация ведущего приложения WPF.
Полный пример кода для задач, приведенных в этом руководстве, см. в разделе Пример размещения составного элемента управления Windows Forms в приложении WPF.
Предварительные требования
Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.
- Visual Studio 2010.
Реализация составного элемента управления Windows Forms
Составной элемент управления Windows Forms, используемый этом примере, является простой формой ввода данных. Эта форма принимает имя и адрес пользователя и затем использует пользовательское событие для возвращения сведений узлу. На следующем рисунке показан отображаемый элемент управления.
Составной элемент управления Windows Forms
Создание проекта
Для запуска проекта выполните следующие действия.
Запустите среду Microsoft Visual Studio и откройте диалоговое окно Новый проект.
В категории Windows выберите шаблон Библиотека элементов управления Windows Forms.
Присвойте проекту имя MyControls.
В качестве расположения задайте папку верхнего уровня с понятным именем, например WpfHostingWindowsFormsControl. Позже ведущее приложение будет помещено в эту папку.
Нажмите кнопку ОК, чтобы создать проект. По умолчанию проект содержит одну страницу с именем UserControl1.
В обозревателе решений переименуйте элемент управления UserControl1 в MyControl1.
Проект должен иметь ссылки на следующие системные библиотеки DLL. Если любая из этих DLL не включена по умолчанию, добавьте ее в проект.
Система
System.Data
System.Drawing
System.Windows.Forms
System.Xml
Добавление элементов управления в форму
Для добавления элементов управления в форму выполните следующие действия:
- Откройте MyControl1 в конструкторе.
Добавьте в форму пять элементов управления Label и соответствующие им элементы управления TextBox с такими же размерами и положением, как на предыдущем рисунке. В примере элементы управления TextBox называются:
txtName
txtAddress
txtCity
txtState
txtZip
Добавьте два элемента управления Button с заголовками ОК и Отмена. В примере кнопки соответственно называются btnOK и btnCancel.
Реализация кода поддержки
Откройте форму в представлении кода. Элемент управления возвращает введенные данные на узел путем вызова пользовательского события OnButtonClick. Данные содержатся в объекте аргумента события. В следующем примере кода показано объявление события и делегата.
Добавьте в класс MyControl1 следующий код.
Public Delegate Sub MyControlEventHandler(ByVal sender As Object, ByVal args As MyControlEventArgs)
Public Event OnButtonClick As MyControlEventHandler
public delegate void MyControlEventHandler(object sender, MyControlEventArgs args);
public event MyControlEventHandler OnButtonClick;
Класс MyControlEventArgs содержит сведения, которые нужно вернуть на узел.
Добавьте в форму следующий класс.
Public Class MyControlEventArgs
Inherits EventArgs
Private _Name As String
Private _StreetAddress As String
Private _City As String
Private _State As String
Private _Zip As String
Private _IsOK As Boolean
Public Sub New(ByVal result As Boolean, ByVal name As String, ByVal address As String, ByVal city As String, ByVal state As String, ByVal zip As String)
_IsOK = result
_Name = name
_StreetAddress = address
_City = city
_State = state
_Zip = zip
End Sub
Public Property MyName() As String
Get
Return _Name
End Get
Set
_Name = value
End Set
End Property
Public Property MyStreetAddress() As String
Get
Return _StreetAddress
End Get
Set
_StreetAddress = value
End Set
End Property
Public Property MyCity() As String
Get
Return _City
End Get
Set
_City = value
End Set
End Property
Public Property MyState() As String
Get
Return _State
End Get
Set
_State = value
End Set
End Property
Public Property MyZip() As String
Get
Return _Zip
End Get
Set
_Zip = value
End Set
End Property
Public Property IsOK() As Boolean
Get
Return _IsOK
End Get
Set
_IsOK = value
End Set
End Property
End Class
public class MyControlEventArgs : EventArgs
{
private string _Name;
private string _StreetAddress;
private string _City;
private string _State;
private string _Zip;
private bool _IsOK;
public MyControlEventArgs(bool result,
string name,
string address,
string city,
string state,
string zip)
{
_IsOK = result;
_Name = name;
_StreetAddress = address;
_City = city;
_State = state;
_Zip = zip;
}
public string MyName
{
get { return _Name; }
set { _Name = value; }
}
public string MyStreetAddress
{
get { return _StreetAddress; }
set { _StreetAddress = value; }
}
public string MyCity
{
get { return _City; }
set { _City = value; }
}
public string MyState
{
get { return _State; }
set { _State = value; }
}
public string MyZip
{
get { return _Zip; }
set { _Zip = value; }
}
public bool IsOK
{
get { return _IsOK; }
set { _IsOK = value; }
}
}
Когда пользователь нажимает кнопку ОК или Отмена, обработчики событий Click создают объект MyControlEventArgs, содержащий данные, и вызывает событие OnButtonClick. Единственным отличием между двумя обработчиками является свойство IsOK аргумента события. Это свойство позволяет узлу определить, какая кнопка была нажата. Оно имеет значение true для кнопки ОК и false для кнопки Отмена. В следующем коде показаны два обработчика кнопок.
Добавьте в класс MyControl1 следующий код.
Private Sub btnOK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOK.Click
Dim retvals As New MyControlEventArgs(True, txtName.Text, txtAddress.Text, txtCity.Text, txtState.Text, txtZip.Text)
RaiseEvent OnButtonClick(Me, retvals)
End Sub
Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Dim retvals As New MyControlEventArgs(False, txtName.Text, txtAddress.Text, txtCity.Text, txtState.Text, txtZip.Text)
RaiseEvent OnButtonClick(Me, retvals)
End Sub
private void btnOK_Click(object sender, System.EventArgs e)
{
MyControlEventArgs retvals = new MyControlEventArgs(true,
txtName.Text,
txtAddress.Text,
txtCity.Text,
txtState.Text,
txtZip.Text);
OnButtonClick(this, retvals);
}
private void btnCancel_Click(object sender, System.EventArgs e)
{
MyControlEventArgs retvals = new MyControlEventArgs(false,
txtName.Text,
txtAddress.Text,
txtCity.Text,
txtState.Text,
txtZip.Text);
OnButtonClick(this, retvals);
}
Задание сборки строгого имени и построение сборки
Для того, чтобы данная сборка ссылалась на приложение WPF, она должна иметь строгое имя. Для создания строгого имени создайте файла ключа с помощью Sn.exe и добавьте его в проект.
Откройте командную строку Visual Studio. Для этого нажмите кнопку Пуск и выберите Все программы/Microsoft Visual Studio 2010/Visual Studio Tools/Командная строка Visual Studio. Будет запущено окно консоли с настраиваемыми переменными среды.
В командной строке перейдите к папке проекта с помощью команды cd.
Создайте файл ключа с именем MyControls.snk, выполнив следующую команду.
Sn.exe -k MyControls.snk
Чтобы включить файл ключа в проект, щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите пункт Свойства. На вкладке Добавление подписи конструктора проектов установите флажок Подписать сборку и перейдите к файлу ключа.
Выполните построение решения. Построение создаст DLL с именем MyControls.dll.
Реализация ведущего приложения WPF
Хост-приложение WPF использует элемент управления WindowsFormsHost для размещения MyControl1. Приложение обрабатывает событие OnButtonClick для получения данных из элемента управления. В нем также есть набор переключателей, позволяющих изменить некоторые свойства элемента управления в приложении WPF. Ниже показано завершенное приложение.
Завершенное приложение, в котором отображается элемент управления, внедренный в приложение WPF
Создание проекта
Для запуска проекта выполните следующие действия.
Откройте Visual Studio и выберите Создать проект.
В категории Windows выберите шаблон Приложение WPF.
Присвойте проекту имя WpfHost.
В качестве расположение укажите ту же папку верхнего уровня, в которой содержится проект MyControls.
Нажмите кнопку ОК, чтобы создать проект.
Также необходимо добавить ссылки на библиотеку DLL, содержащую элемент управления MyControl1 и другие сборки.
Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите команду Добавить ссылку.
Перейдите на вкладку Обзор и укажите папку, которая содержит файл MyControls.dll. В данном пошаговом руководстве это папка MyControls\bin\Debug.
Выберите файл MyControls.dll и нажмите кнопку ОК.
Добавьте ссылку на сборку WindowsFormsIntegration, которая называется WindowsFormsIntegration.dll.
Реализация базовой разметки
user interface (UI) ведущего приложения реализуется в файле MainWindow.xaml. Этот файл содержит разметку Extensible Application Markup Language (XAML), которая определяет макет и размещает элемент управления Windows Forms. Приложение разделено на три области.
Панель Свойства элемента управления, которая содержит коллекцию переключателей, которые можно использовать для изменения различных свойств размещаемого элемента управления.
Панель Данные элемента управления, которая содержит несколько элементов TextBlock, отображающих возвращаемые данные размещенного элемента управления.
Сам размещаемый элемент управления.
В следующем коде XAML показан базовый макет. Разметка, необходимая для размещения элемента управления MyControl1, опущена в этом примере, но будет рассмотрена позднее.
Замените код XAML в файле MainWindow.xaml следующим кодом. Если используется язык Visual Basic, измените класс на x:Class="MainWindow".
<Window xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfHost.MainWindow"
xmlns:mcl="clr-namespace:MyControls;assembly=MyControls"
Loaded="Init">
<DockPanel>
<DockPanel.Resources>
<Style x:Key="inlineText" TargetType="{x:Type Inline}">
<Setter Property="FontWeight" Value="Normal"/>
</Style>
<Style x:Key="titleText" TargetType="{x:Type TextBlock}">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="10,5,10,0"/>
</Style>
</DockPanel.Resources>
<StackPanel Orientation="Vertical"
DockPanel.Dock="Left"
Background="Bisque"
Width="250">
<TextBlock Margin="10,10,10,10"
FontWeight="Bold"
FontSize="12">Control Properties</TextBlock>
<TextBlock Style="{StaticResource titleText}">Background Color</TextBlock>
<StackPanel Margin="10,10,10,10">
<RadioButton Name="rdbtnOriginalBackColor"
IsChecked="True"
Click="BackColorChanged">Original</RadioButton>
<RadioButton Name="rdbtnBackGreen"
Click="BackColorChanged">LightGreen</RadioButton>
<RadioButton Name="rdbtnBackSalmon"
Click="BackColorChanged">LightSalmon</RadioButton>
</StackPanel>
<TextBlock Style="{StaticResource titleText}">Foreground Color</TextBlock>
<StackPanel Margin="10,10,10,10">
<RadioButton Name="rdbtnOriginalForeColor"
IsChecked="True"
Click="ForeColorChanged">Original</RadioButton>
<RadioButton Name="rdbtnForeRed"
Click="ForeColorChanged">Red</RadioButton>
<RadioButton Name="rdbtnForeYellow"
Click="ForeColorChanged">Yellow</RadioButton>
</StackPanel>
<TextBlock Style="{StaticResource titleText}">Font Family</TextBlock>
<StackPanel Margin="10,10,10,10">
<RadioButton Name="rdbtnOriginalFamily"
IsChecked="True"
Click="FontChanged">Original</RadioButton>
<RadioButton Name="rdbtnTimes"
Click="FontChanged">Times New Roman</RadioButton>
<RadioButton Name="rdbtnWingdings"
Click="FontChanged">Wingdings</RadioButton>
</StackPanel>
<TextBlock Style="{StaticResource titleText}">Font Size</TextBlock>
<StackPanel Margin="10,10,10,10">
<RadioButton Name="rdbtnOriginalSize"
IsChecked="True"
Click="FontSizeChanged">Original</RadioButton>
<RadioButton Name="rdbtnTen"
Click="FontSizeChanged">10</RadioButton>
<RadioButton Name="rdbtnTwelve"
Click="FontSizeChanged">12</RadioButton>
</StackPanel>
<TextBlock Style="{StaticResource titleText}">Font Style</TextBlock>
<StackPanel Margin="10,10,10,10">
<RadioButton Name="rdbtnNormalStyle"
IsChecked="True"
Click="StyleChanged">Original</RadioButton>
<RadioButton Name="rdbtnItalic"
Click="StyleChanged">Italic</RadioButton>
</StackPanel>
<TextBlock Style="{StaticResource titleText}">Font Weight</TextBlock>
<StackPanel Margin="10,10,10,10">
<RadioButton Name="rdbtnOriginalWeight"
IsChecked="True"
Click="WeightChanged">
Original
</RadioButton>
<RadioButton Name="rdbtnBold"
Click="WeightChanged">Bold</RadioButton>
</StackPanel>
</StackPanel>
<WindowsFormsHost Name="wfh"
DockPanel.Dock="Top"
Height="300">
<mcl:MyControl1 Name="mc"/>
</WindowsFormsHost>
<StackPanel Orientation="Vertical"
Height="Auto"
Background="LightBlue">
<TextBlock Margin="10,10,10,10"
FontWeight="Bold"
FontSize="12">Data From Control</TextBlock>
<TextBlock Style="{StaticResource titleText}">
Name: <Span Name="txtName" Style="{StaticResource inlineText}"/>
</TextBlock>
<TextBlock Style="{StaticResource titleText}">
Street Address: <Span Name="txtAddress" Style="{StaticResource inlineText}"/>
</TextBlock>
<TextBlock Style="{StaticResource titleText}">
City: <Span Name="txtCity" Style="{StaticResource inlineText}"/>
</TextBlock>
<TextBlock Style="{StaticResource titleText}">
State: <Span Name="txtState" Style="{StaticResource inlineText}"/>
</TextBlock>
<TextBlock Style="{StaticResource titleText}">
Zip: <Span Name="txtZip" Style="{StaticResource inlineText}"/>
</TextBlock>
</StackPanel>
</DockPanel>
</Window>
Первый элемент StackPanel содержит несколько наборов элементов управления RadioButton, позволяющих изменять различные свойства по умолчанию размещаемого элемента управления. Затем следует элемент WindowsFormsHost, который содержит MyControl1. Последний элемент StackPanel содержит несколько элементов TextBlock, отображающих данные, возвращаемые размещаемым элементом управления. Порядок элементов и параметров атрибутов Dock и Height внедряет размещаемый элемент управления в окно без пропусков или искажения.
Размещение элемента управления
В следующей измененной версии предыдущего кода XAML уделяется внимание элементам, необходимым для размещения элемента управления MyControl1.
<Window xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfHost.MainWindow"
xmlns:mcl="clr-namespace:MyControls;assembly=MyControls"
Loaded="Init">
...
<WindowsFormsHost Name="wfh"
DockPanel.Dock="Top"
Height="300">
<mcl:MyControl1 Name="mc"/>
</WindowsFormsHost>
Атрибут сопоставления пространства имен xmlns создает ссылку на пространство имен MyControls, содержащее размещаемый элемент управления. Такое сопоставление позволяет представлять MyControl1 в XAML как <mcl:MyControl1>.
Два элемента в коде XAML обрабатывают размещение:
WindowsFormsHost представляет элемент WindowsFormsHost, который позволяет разместить элемент управления Windows Forms в приложении WPF.
mcl:MyControl1, который представляет MyControl1, добавляется к дочерней коллекции элемента WindowsFormsHost. В результате этот элемент управления Windows Forms отображается как часть окна WPF, и с элементом управления можно взаимодействовать из приложения.
Реализация файла кода программной части
Файл кода программной части MainWindow.xaml.vb или MainWindow.xaml.cs содержит процедурный код, реализующий функциональные возможности UI, рассмотренные в предыдущем разделе. Основные задачи:
Присоединение обработчика событий к событию MyControl1 OnButtonClick.
Изменение различных свойств MyControl1 в зависимости от способа установки коллекции переключателей.
Отображение данных, собранных элементом управления.
Инициализация приложения
Код инициализации содержится в обработчике событий Loaded окна; он присоединяет обработчик событий к событию OnButtonClick элемента управления.
В файле MainWindow.xaml.vb или MainWindow.xaml.cs добавьте следующий код в класс MainWindow.
Private app As Application
Private myWindow As Window
Private initFontWeight As FontWeight
Private initFontSize As [Double]
Private initFontStyle As FontStyle
Private initBackBrush As SolidColorBrush
Private initForeBrush As SolidColorBrush
Private initFontFamily As FontFamily
Private UIIsReady As Boolean = False
Private Sub Init(ByVal sender As Object, ByVal e As RoutedEventArgs)
app = System.Windows.Application.Current
myWindow = CType(app.MainWindow, Window)
myWindow.SizeToContent = SizeToContent.WidthAndHeight
wfh.TabIndex = 10
initFontSize = wfh.FontSize
initFontWeight = wfh.FontWeight
initFontFamily = wfh.FontFamily
initFontStyle = wfh.FontStyle
initBackBrush = CType(wfh.Background, SolidColorBrush)
initForeBrush = CType(wfh.Foreground, SolidColorBrush)
Dim mc As MyControl1 = wfh.Child
AddHandler mc.OnButtonClick, AddressOf Pane1_OnButtonClick
UIIsReady = True
End Sub
private Application app;
private Window myWindow;
FontWeight initFontWeight;
Double initFontSize;
FontStyle initFontStyle;
SolidColorBrush initBackBrush;
SolidColorBrush initForeBrush;
FontFamily initFontFamily;
bool UIIsReady = false;
private void Init(object sender, EventArgs e)
{
app = System.Windows.Application.Current;
myWindow = (Window)app.MainWindow;
myWindow.SizeToContent = SizeToContent.WidthAndHeight;
wfh.TabIndex = 10;
initFontSize = wfh.FontSize;
initFontWeight = wfh.FontWeight;
initFontFamily = wfh.FontFamily;
initFontStyle = wfh.FontStyle;
initBackBrush = (SolidColorBrush)wfh.Background;
initForeBrush = (SolidColorBrush)wfh.Foreground;
(wfh.Child as MyControl1).OnButtonClick += new MyControl1.MyControlEventHandler(Pane1_OnButtonClick);
UIIsReady = true;
}
Поскольку ранее рассмотренный код XAML добавил элемент управления MyControl1 в коллекцию дочерних элементов элемента WindowsFormsHost, можно привести свойство Child элемента WindowsFormsHost, чтобы получить ссылку на элемент управления MyControl1. Затем можно использовать эту ссылку для присоединения обработчика событий к OnButtonClick.
Помимо ссылки на сам элемент управления, WindowsFormsHost предоставляет ряд свойств элемента управления, которыми можно управлять из приложения. Код инициализации назначает эти значения закрытых глобальных переменных для последующего использования в приложении.
Для обеспечения удобного доступа к типам из библиотеки DLL MyControls, добавьте следующий оператор Imports или using в начало файла.
Imports MyControls
using MyControls;
Обработка события OnButtonClick
MyControl1 вызывает событие OnButtonClick при щелчке по любой из кнопок элемента управления.
Добавьте в класс MainWindow следующий код.
'Handle button clicks on the Windows Form control
Private Sub Pane1_OnButtonClick(ByVal sender As Object, ByVal args As MyControlEventArgs)
txtName.Inlines.Clear()
txtAddress.Inlines.Clear()
txtCity.Inlines.Clear()
txtState.Inlines.Clear()
txtZip.Inlines.Clear()
If args.IsOK Then
txtName.Inlines.Add(" " + args.MyName)
txtAddress.Inlines.Add(" " + args.MyStreetAddress)
txtCity.Inlines.Add(" " + args.MyCity)
txtState.Inlines.Add(" " + args.MyState)
txtZip.Inlines.Add(" " + args.MyZip)
End If
End Sub
//Handle button clicks on the Windows Form control
private void Pane1_OnButtonClick(object sender, MyControlEventArgs args)
{
txtName.Inlines.Clear();
txtAddress.Inlines.Clear();
txtCity.Inlines.Clear();
txtState.Inlines.Clear();
txtZip.Inlines.Clear();
if (args.IsOK)
{
txtName.Inlines.Add( " " + args.MyName );
txtAddress.Inlines.Add( " " + args.MyStreetAddress );
txtCity.Inlines.Add( " " + args.MyCity );
txtState.Inlines.Add( " " + args.MyState );
txtZip.Inlines.Add( " " + args.MyZip );
}
}
Данные в текстовых полях упаковываются в объект MyControlEventArgs. При нажатии кнопки ОК обработчик событий извлекает данные и отображает их на панели ниже MyControl1.
Изменение свойств элемента управления
Элемент WindowsFormsHost предоставляет некоторые свойства по умолчанию для размещаемого элемента управления. В результате можно изменить внешний вид элемента управления для более точного соответствия стилю приложения. Наборы переключателей на левой панели позволяют пользователю изменять некоторые свойства цвета и шрифта. У каждого набора кнопок есть обработчик событий Click, который отслеживает выбор пользовательских переключателей и изменяет соответствующее свойство элемента управления.
Добавьте в класс MainWindow следующий код.
Private Sub BackColorChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
If sender.Equals(rdbtnBackGreen) Then
wfh.Background = New SolidColorBrush(Colors.LightGreen)
ElseIf sender.Equals(rdbtnBackSalmon) Then
wfh.Background = New SolidColorBrush(Colors.LightSalmon)
ElseIf UIIsReady = True Then
wfh.Background = initBackBrush
End If
End Sub
Private Sub ForeColorChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
If sender.Equals(rdbtnForeRed) Then
wfh.Foreground = New SolidColorBrush(Colors.Red)
ElseIf sender.Equals(rdbtnForeYellow) Then
wfh.Foreground = New SolidColorBrush(Colors.Yellow)
ElseIf UIIsReady = True Then
wfh.Foreground = initForeBrush
End If
End Sub
Private Sub FontChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
If sender.Equals(rdbtnTimes) Then
wfh.FontFamily = New FontFamily("Times New Roman")
ElseIf sender.Equals(rdbtnWingdings) Then
wfh.FontFamily = New FontFamily("Wingdings")
ElseIf UIIsReady = True Then
wfh.FontFamily = initFontFamily
End If
End Sub
Private Sub FontSizeChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
If sender.Equals(rdbtnTen) Then
wfh.FontSize = 10
ElseIf sender.Equals(rdbtnTwelve) Then
wfh.FontSize = 12
ElseIf UIIsReady = True Then
wfh.FontSize = initFontSize
End If
End Sub
Private Sub StyleChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
If sender.Equals(rdbtnItalic) Then
wfh.FontStyle = FontStyles.Italic
ElseIf UIIsReady = True Then
wfh.FontStyle = initFontStyle
End If
End Sub
Private Sub WeightChanged(ByVal sender As Object, ByVal e As RoutedEventArgs)
If sender.Equals(rdbtnBold) Then
wfh.FontWeight = FontWeights.Bold
ElseIf UIIsReady = True Then
wfh.FontWeight = initFontWeight
End If
End Sub
private void BackColorChanged(object sender, RoutedEventArgs e)
{
if (sender == rdbtnBackGreen)
wfh.Background = new SolidColorBrush(Colors.LightGreen);
else if (sender == rdbtnBackSalmon)
wfh.Background = new SolidColorBrush(Colors.LightSalmon);
else if (UIIsReady == true)
wfh.Background = initBackBrush;
}
private void ForeColorChanged(object sender, RoutedEventArgs e)
{
if (sender == rdbtnForeRed)
wfh.Foreground = new SolidColorBrush(Colors.Red);
else if (sender == rdbtnForeYellow)
wfh.Foreground = new SolidColorBrush(Colors.Yellow);
else if (UIIsReady == true)
wfh.Foreground = initForeBrush;
}
private void FontChanged(object sender, RoutedEventArgs e)
{
if (sender == rdbtnTimes)
wfh.FontFamily = new FontFamily("Times New Roman");
else if (sender == rdbtnWingdings)
wfh.FontFamily = new FontFamily("Wingdings");
else if (UIIsReady == true)
wfh.FontFamily = initFontFamily;
}
private void FontSizeChanged(object sender, RoutedEventArgs e)
{
if (sender == rdbtnTen)
wfh.FontSize = 10;
else if (sender == rdbtnTwelve)
wfh.FontSize = 12;
else if (UIIsReady == true)
wfh.FontSize = initFontSize;
}
private void StyleChanged(object sender, RoutedEventArgs e)
{
if (sender == rdbtnItalic)
wfh.FontStyle = FontStyles.Italic;
else if (UIIsReady == true)
wfh.FontStyle = initFontStyle;
}
private void WeightChanged(object sender, RoutedEventArgs e)
{
if (sender == rdbtnBold)
wfh.FontWeight = FontWeights.Bold;
else if (UIIsReady == true)
wfh.FontWeight = initFontWeight;
}
Постройте и запустите приложение. Добавьте произвольный текст в составной элемент управления Windows Forms и нажмите кнопку OK. Этот текст появится в подписях. Щелкайте различные переключатели, чтобы увидеть соответствующий эффект в элементе управления.
См. также
Задачи
Пошаговое руководство. Размещение элемента управления Windows Forms в приложении WPF
Ссылки
Основные понятия
Пошаговое руководство. Размещение составного элемента управления WPF в форме Windows Forms
Другие ресурсы
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Август 2010 г. |
Обновлено для Visual Studio 2010. |
Обратная связь от клиента. |