Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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.
Реализация составного элемента управления Windows Forms
Составной элемент управления Windows Forms, используемый в этом примере, является простой формой ввода данных. Эта форма принимает имя и адрес пользователя, а затем использует настраиваемое событие для возврата этих сведений на хост. На следующем рисунке показан отрисованный элемент управления.
На следующем рисунке показан составной элемент управления Windows Forms:
Создание проекта
Чтобы запустить проект, выполните следующие действия.
Запустите Visual Studio и откройте диалоговое окно создания проекта.
В категории "Окно" выберите шаблон библиотеки элементов управления 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 void MyControlEventHandler(object sender, MyControlEventArgs args);
public event MyControlEventHandler OnButtonClick;
Public Delegate Sub MyControlEventHandler(ByVal sender As Object, ByVal args As MyControlEventArgs)
Public Event OnButtonClick As MyControlEventHandler
Класс MyControlEventArgs
содержит информацию, которая будет возвращена хосту.
Добавьте следующий класс в форму.
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; }
}
}
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
Когда пользователь нажимает кнопку "ОК " или " Отмена ", Click обработчики событий создают MyControlEventArgs
объект, содержащий данные и вызывает OnButtonClick
событие. Единственное различие между двумя обработчиками — свойство аргумента IsOK
события. Это свойство позволяет узлу определить, какая кнопка была нажата. Для кнопки "ОК" задано true
значение "ОК " и false
для кнопки "Отмена ". В следующем коде показаны два обработчика кнопки.
Добавьте в класс MyControl1
приведенный далее код.
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);
}
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
Присвоение сборке сто́кого имени и создание сборки
Чтобы приложение WPF могло ссылаться на эту сборку, она должна иметь сильное имя. Чтобы создать строгое имя, создайте файл ключа с Sn.exe и добавьте его в проект.
Откройте командную строку Visual Studio. Для этого щелкните меню "Пуск " и выберите команду "Все программы", Microsoft Visual Studio 2010/Visual Studio Tools/Visual Studio Command Prompt. При этом запускается окно консоли с настраиваемыми переменными среды.
В командной строке используйте
cd
команду, чтобы перейти в папку проекта.Создайте файл ключа с именем MyControls.snk, выполнив следующую команду.
Sn.exe -k MyControls.snk
Чтобы включить файл ключа в проект, щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите пункт "Свойства". В конструкторе проектов щелкните вкладку "Подпись" , установите флажок "Подписать сборку " и перейдите к файлу ключа.
Создайте решение. Сборка создаст библиотеку DLL с именем MyControls.dll.
Реализация ведущего приложения WPF
Приложение-хост WPF использует WindowsFormsHost элемент управления для размещения MyControl1
. Приложение обрабатывает OnButtonClick
событие для получения данных из элемента управления. Он также содержит коллекцию кнопок параметров, которые позволяют изменять некоторые свойства элемента управления из приложения WPF. На следующем рисунке показано готовое приложение.
На следующем рисунке показано полное приложение, включая элемент управления, внедренный в приложение WPF:
Создание проекта
Чтобы запустить проект, выполните следующие действия.
Откройте Visual Studio и выберите новый проект.
В категории "Окно" выберите шаблон приложения WPF .
Назовите новый проект
WpfHost
.Для расположения укажите ту же папку верхнего уровня, которая содержит проект MyControls.
Нажмите кнопку ОК, чтобы создать проект.
Кроме того, необходимо добавить ссылки на библиотеку DLL, содержащую MyControl1
и другие сборки.
Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите "Добавить ссылку".
Перейдите на вкладку "Обзор
" и перейдите к папке, содержащей MyControls.dll. В этом пошаговом руководстве эта папка — MyControls\bin\Debug. Выберите MyControls.dll, а затем нажмите кнопку ОК.
Добавьте ссылку на сборку WindowsFormsIntegration, которая называется WindowsFormsIntegration.dll.
Реализация базового макета
Пользовательский интерфейс ведущего приложения реализуется в MainWindow.xaml. Этот файл содержит расширяемую разметку языка разметки приложений (XAML), которая определяет макет и размещает элемент управления Windows Forms. Приложение разделено на три региона:
Панель свойств элемента управления , содержащая коллекцию кнопок параметров, которые можно использовать для изменения различных свойств размещенного элемента управления.
Данные из панели управления, которая содержит несколько TextBlock элементов, которые отображают данные, возвращаемые из размещенного элемента управления.
Хост-элемент управления.
Базовый макет показан в следующем коде XAML. Разметка, необходимая для размещения MyControl1
, опущена в этом примере, но будет рассмотрена позже.
Замените XAML в MainWindow.xaml следующим образом. Если вы используете Visual Basic, измените класс x:Class="MainWindow"
на .
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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, и вы можете взаимодействовать с элементом управления из приложения.
Реализация файла Code-Behind
Файл программной части MainWindow.xaml.vb или MainWindow.xaml.cs содержит процедурный код, реализующий функциональные возможности пользовательского интерфейса, описанные в предыдущем разделе. Основными задачами являются:
Присоединение обработчика событий к
MyControl1
OnButtonClick
событию.Изменение различных свойств
MyControl1
, в зависимости от того, как настроен набор кнопок параметров.Отображение данных, собранных элементом управления.
Инициализация приложения
Код инициализации содержится в обработчике событий для события окна Loaded и подключает обработчик событий к событию элемента управления OnButtonClick
.
В MainWindow.xaml.vb или MainWindow.xaml.cs добавьте следующий код в MainWindow
класс.
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;
}
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
Поскольку ранее рассмотренный XAML добавил MyControl1
в коллекцию дочерних элементов элемента WindowsFormsHost, вы можете привести элемент WindowsFormsHost к Child, чтобы получить ссылку на MyControl1
. Затем эту ссылку можно использовать для привязки обработчика событий к OnButtonClick
.
Помимо предоставления ссылки на сам элемент управления, WindowsFormsHost предоставляет ряд свойств элемента управления, которые можно управлять из приложения. Код инициализации назначает эти значения частным глобальным переменным для последующего использования в приложении.
Чтобы получить доступ к типам в MyControls
библиотеке DLL, добавьте следующую Imports
или using
инструкцию в начало файла.
Imports MyControls
using MyControls;
Обработка события OnButtonClick
MyControl1
вызывает OnButtonClick
событие, когда пользователь щелкает любую из кнопок элемента управления.
Добавьте в класс MainWindow
приведенный далее код.
//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 );
}
}
'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
Данные в текстовых полях упаковываются в MyControlEventArgs
объект. Если пользователь нажимает кнопку "ОК ", обработчик событий извлекает данные и отображает его на панели ниже MyControl1
.
Изменение свойств элемента управления
Элемент WindowsFormsHost предоставляет несколько свойств по умолчанию размещенного элемента управления. В результате вы можете изменить внешний вид элемента управления, чтобы он соответствовал стилю приложения. Наборы кнопок параметров на левой панели позволяют пользователю изменять несколько цветов и свойств шрифта. Каждый набор кнопок имеет обработчик события Click , который обнаруживает выбор параметров пользователя и изменяет соответствующее свойство элемента управления.
Добавьте в класс MainWindow
приведенный далее код.
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;
}
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
Создайте и запустите приложение. Добавьте текст в составной элемент управления Windows Forms и нажмите кнопку "ОК". Текст отображается в метках. Щелкните разные переключатели, чтобы увидеть изменения в элементе управления.
См. также
.NET Desktop feedback