Обзор: размещение элементов управления Windows Presentation Foundation в приложении Windows Forms
Обновлен: Ноябрь 2007
Клиент Windows Presentation Foundation (WPF) предоставляет среду с широкими возможностями для создания приложений. Однако если имеющийся код Windows Forms содержит важные элементы, более эффективным может быть расширение существующего приложения Windows Forms с помощью клиента WPF, а не переписывание кода «с нуля». Распространенным случаем является задача внедрить одну или нескольких страниц, реализованных с помощью WPF, в приложение Windows Forms.
В данном пошаговом руководстве показаны действия, выполняемые для размещения страницы WPF в приложении Windows Forms. Страница является простым приложением ввода данных, упакованных в библиотеку DLL. Этот пример почти идентично повторяет свойства и функциональные возможности примера Пример размещения составного элемента управления Windows Forms в Windows Presentation Foundation. Основным различием является то, что сценарий размещения выполняется в обратном порядке.
![]() |
---|
Размещаемая страница не является в строгом смысле элементом управления WPF. Это обычная страница WPF, упакованная в библиотеку DLL. Однако методы для размещения элемента управления WPF в форму идентичны тем, которые используются для размещения обычных страниц. Дальнейшее обсуждение элементов управления WPF см. в разделе Настройка элементов управления. |
Данный обзор разделен на два раздела. В первом разделе кратко описывается реализация страницы WPF. Во втором разделе подробно обсуждается порядок размещения страницы в приложении Windows Forms, получение ее событий и доступ к некоторым ее свойствам.
В этом пошаговом руководстве рассматриваются следующие задачи:
Реализация страницы Windows Presentation Foundation.
Реализация ведущего приложения Windows Forms.
Полный пример кода задач, приведенных в этом обзоре, см. в разделе Пример размещения простого элемента управления Windows Presentation Foundation в Windows Forms.
Предварительные условия
Для выполнения инструкций данного пошагового руководства необходимы следующие компоненты.
- Visual Studio 2008.
Реализация страницы Windows Presentation Foundation
Страница WPF, используемая в этом примере, представляет собой простую форму ввода данных, содержащую имя пользователя и адрес. Когда пользователь нажимает одну из двух кнопок, чтобы указать, что задача завершена, страница создает пользовательское событие для возвращения сведений на узел. Эта страница в основном идентична по форме и возможности элементу управления Windows Forms, используемому в примере Пошаговое руководство. Размещение составного элемента управления Windows Presentation Foundation в Windows Forms. Каких-либо дополнительных сведений о ее настройке для размещения в форме Windows Forms не существует. Ее можно также легко загрузить в объект Frame на более крупной странице WPF. На следующем рисунке показана страница, готовая к просмотру.
Страница Windows Presentation Foundation
Создание проекта
Чтобы запустить проект, выполните следующие действия.
Запустите приложение Microsoft Visual Studio и откройте диалоговое окно Создать проект.
Выберите шаблон Приложение обозревателя WPF.
Назовите новый проект MyControls и поместите его в папку верхнего уровня с подходящим именем, например — WfHostingWpf. Позже ведущее приложение будет помещено в эту папку. Нажмите кнопку ОК, чтобы создать проект. По умолчанию проект содержит одну страницу с именем Page1.
Щелкните правой кнопкой имя проекта в обозревателе решений и выберите Свойства.
Задайте для параметра Тип выходных данных значение Библиотека классов, чтобы скомпилировать страницу как библиотеку DLL.
Удалите файлы определения приложения MyApp.xaml и MyApp.xaml.cs из проекта. Эти файлы нужны, только если страница реализуется как приложение.
![]() |
---|
При компиляции приложения WPF как библиотеки классов, его невозможно запустить для просмотра отображаемой страницы. По этой причине, может оказаться более удобным оставить выходной тип «Приложение Windows», пока приложение не будет полностью реализовано. Это позволит проверять внешний вид страниц при запуске приложения. По завершении, удалите файлы определения приложения и измените тип выходных данных на «Библиотека классов», чтобы скомпилировать приложение как библиотеку DLL. |
Проект должен иметь ссылки на следующие системные библиотеки DLL. Если какая-либо из этих библиотек DLL не включена по умолчанию, добавьте ее в проект.
System
PresentationCore
PresentationFramework
WindowsBase.
Реализация пользовательского интерфейса страницы
Интерфейс пользовательский интерфейс страницы WPF реализуется посредством кода Язык XAML (Extensible Application Markup Language). Он должен быть разработан соответственно внешнему виду и функциональным возможностям элемента управления Windows Forms, который обсуждается в разделе Пошаговое руководство. Размещение составного элемента управления Windows Presentation Foundation в Windows Forms. Интерфейс ввода данных Пользовательский интерфейс страницы состоит из пяти элементов TextBox. Каждый элемент TextBox имеет связанный элемент TextBlock, служащий в качестве метки. В нижней части страницы имеются два элемента Button — ОК и Отмена. При нажатии любой кнопки, страница создает пользовательское событие для возвращения сведения на узел.
Базовый макет
В элементе Grid содержатся различные элементы Пользовательский интерфейс. Элемент Grid можно использовать для упорядочивания содержимого страницы практически так же, как элемент Table в коде HTML. Приложение WPF также содержит элемент Table, но элемент Grid более легкий и лучше подходит для простых задач макетов.
В следующем примере показан код базового макета. Этот код определяет общую структуру страницы, указывая число столбцов и строк в элементе Grid. Используйте его для замены кода страницы Page1.xaml.
<Grid xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyControls.Page1"
Background="#DCDCDC"
Width="375"
Height="250"
Name="rootElement"
Loaded="Init">
...
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
Добавление в сетку элементов TextBlock и TextBox
Элемент Пользовательский интерфейс помещается в сетке посредством задания атрибутам RowProperty и ColumnProperty элемента соответствующего номера строки и столбца. Следует помнить, что нумерация строк и столбцов ведется от нуля. Можно создать общий элемент для нескольких столбцов, задав атрибут ColumnSpanProperty. Дополнительные сведения об элементах Grid см. в разделе Практическое руководство. Создание элемента сетки.
В следующем примере показаны элементы TextBox и TextBlock страницы и их атрибуты RowProperty и ColumnProperty, с помощью которых задается правильное расположение элементов в сетке. Добавьте следующий код к странице Page1.xaml под элементом Grid.
<TextBlock Grid.Column="0"
Grid.Row="0"
Grid.ColumnSpan="4"
Margin="10,5,10,0"
HorizontalAlignment="Center"
Style="{StaticResource titleText}">Simple WPF Control</TextBlock>
<TextBlock Grid.Column="0"
Grid.Row="1"
Style="{StaticResource inlineText}"
Name="nameLabel">Name</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="1"
Grid.ColumnSpan="3"
Name="txtName"/>
<TextBlock Grid.Column="0"
Grid.Row="2"
Style="{StaticResource inlineText}"
Name="addressLabel">Street Address</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="2"
Grid.ColumnSpan="3"
Name="txtAddress"/>
<TextBlock Grid.Column="0"
Grid.Row="3"
Style="{StaticResource inlineText}"
Name="cityLabel">City</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="3"
Width="100"
Name="txtCity"/>
<TextBlock Grid.Column="2"
Grid.Row="3"
Style="{StaticResource inlineText}"
Name="stateLabel">State</TextBlock>
<TextBox Grid.Column="3"
Grid.Row="3"
Width="50"
Name="txtState"/>
<TextBlock Grid.Column="0"
Grid.Row="4"
Style="{StaticResource inlineText}"
Name="zipLabel">Zip</TextBlock>
<TextBox Grid.Column="1"
Grid.Row="4"
Width="100"
Name="txtZip"/>
Создание стилей элементов пользовательского интерфейса
Многие элементы в форме для ввода данных имеют одинаковый внешний вид; это означает, что они имеют одинаковые параметры нескольких свойств. Вместо установки отдельно атрибутов каждого элемента код в данном примере использует элементы Style для определения стандартных параметров свойств классов элементов. Такой подход упрощает страницу и позволяет изменять внешний вид нескольких элементов посредством одного атрибута стиля.
Элементы Style содержатся в свойстве Resources элемента Grid, поэтому их можно использовать всеми элементами на странице. Если стиль поименован, он применяется к элементу посредством добавления набора элементов Style к стилю с заданным именем. Стили, которые не поименованы, становятся стилем по умолчанию для элемента. Дополнительные сведения о стилях WPF см. раздел Стилизация и использование шаблонов.
В следующем примере показаны элементы Style страницы WPF. Добавьте код к странице Page1.xaml под элементом Grid. Чтобы увидеть, как стили применяются к элементам, см. предыдущий пример кода. Например, последний элемент TextBlock имеет стиль inlineText, а в последнем элементе TextBox используется стиль по умолчанию.
<Grid.Resources>
<Style x:Key="inlineText" TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="10,5,10,0"/>
<Setter Property="FontWeight" Value="Normal"/>
<Setter Property="FontSize" Value="12"/>
</Style>
<Style x:Key="titleText" TargetType="{x:Type TextBlock}">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Margin" Value="10,5,10,0"/>
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Margin" Value="10,5,10,0"/>
<Setter Property="Width" Value="60"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="10,5,10,0"/>
</Style>
</Grid.Resources>
Добавление кнопок «ОК» и «Отмена»
Завершающими элементами на странице являются элементы ButtonОК и Отмена, которые занимают первые два столбца последней строки элемента Grid. Эти элементы используют общий обработчик событий ButtonClicked и стиль по умолчанию Button, определенный в предыдущем примере кода. Добавьте следующий код к странице Page1.xaml под завершающим элементом TextBox. Часть XAML страницы завершена.
<Button Grid.Row="5"
Grid.Column="0"
Name="btnOK"
Click="ButtonClicked">OK</Button>
<Button Grid.Row="5"
Grid.Column="1"
Name="btnCancel"
Click="ButtonClicked">Cancel</Button>
Реализация файла с выделенным кодом страницы
Файл с выделенным кодом страницы WPF Page1.xaml.cs реализует четыре основных задачи:
Регистрирует имя библиотеки DLL страницы с объектом Application, чтобы он знал, откуда загружать страницу.
Обрабатывает событие, когда пользователь нажимает одну из кнопок.
Извлекает данные из элементов TextBox и пакует их в объект аргумента пользовательского события.
Вызывает пользовательское событие OnButtonClick, которое уведомляет узел, что пользователь завершил работу, и возвращает данные на узел.
Страница также предоставляет ряд свойств цвета и шрифтов, которые позволяют управлять внешним видом страницы. В отличие от классаWindowsFormsHost, который используется для размещения элемента управления Windows Forms, класс ElementHost предоставляет только свойство страницы Background. Чтобы обеспечить сходство между этим примером кода и примером, который обсуждается в разделе Пошаговое руководство. Размещение составного элемента управления Windows Presentation Foundation в Windows Forms, на странице предоставлены остальные свойства.
Базовая структура файла с выделенным кодом
Файл с выделенным кодом содержит одно пространство имен MyControls, которое состоит из двух классов Page1 и MyControlEventArgs. Замените код страницы Page1.xaml.cs следующим кодом.
using System;
using System.Windows;
using System.Windows.Navigation;
using System.Windows.Controls;
using System.Windows.Media;
namespace MyControls
{
public partial class Page1 : Grid
{
//...
}
public class MyControlEventArgs : EventArgs
{
//...
}
}
Первый класс Page1 — это разделяемый класс, содержащий код, который реализует функциональные возможности элемента Пользовательский интерфейс, определенного на странице Page1.xaml. При синтаксическом анализе страницы Page1.xaml код XAML преобразуется в тот же разделяемый класс, и два разделяемых класса объединяются для формирования скомпилированной страницы. По этой причине, имя класса в файле с выделенным кодом должно соответствовать имени класса, назначенного странице Page1.xaml, и оно должно наследоваться из корневого элемента страницы. Второй класс MyControlEventArgs является классом аргументов события, который используется для возвращения данных на узел.
Инициализация класса Page1
Следующий пример кода реализует несколько основных задач.
Объявляет частное событие OnButtonClick и его связанный делегат MyControlEventHandler.
Создает несколько частных глобальных переменных, хранящих данные пользователя. Эти данные предоставляются через соответствующие свойства.
Реализует обработчик Init для события Loaded страницы. Этот обработчик инициализирует глобальные переменные путем назначения их значений, определенных на странице Page1.xaml. Для этого он использует свойство Name, назначенное типичному элементу TextBlocknameLabel, для доступа к параметрам свойств этого элемента.
Добавьте следующий код к классу Page1.
public partial class Page1 : Grid
{
public delegate void MyControlEventHandler(object sender, MyControlEventArgs args);
public event MyControlEventHandler OnButtonClick;
private FontWeight _fontWeight;
private double _fontSize;
private FontFamily _fontFamily;
private FontStyle _fontStyle;
private SolidColorBrush _foreground;
private SolidColorBrush _background;
private void Init(object sender, EventArgs e)
{
//They all have the same style, so use nameLabel to set initial values.
_fontWeight = nameLabel.FontWeight;
_fontSize = nameLabel.FontSize;
_fontFamily = nameLabel.FontFamily;
_fontStyle = nameLabel.FontStyle;
_foreground = (SolidColorBrush)nameLabel.Foreground;
_background = (SolidColorBrush)rootElement.Background;
}
Обработка событий нажатия кнопки
Пользователь указывает, что задача ввода данных является завершенной, нажав либо кнопку ОК или Отмена в нижней части страницы. Обе кнопки используют тот же обработчик событий Click — ButtonClicked. Обе кнопки имеют имя btnOK или btnFalse, которое позволяет обработчику определить, какая кнопка была нажата, путем проверки значения аргумента sender. Обработчик выполняет следующие действия.
Создает объект MyControlEventArgs, содержащий данные из элементов TextBox страницы.
Если пользователь нажимает кнопку Отмена, для свойства IsOK объекта MyControlEventArgs задает значение false.
Вызывает событие OnButtonClick, чтобы указать узлу, что пользователь завершил работу, и передает обратно собранные данные.
Добавьте следующий код к классу Page1 под методом Init.
private void ButtonClicked(object sender, RoutedEventArgs e)
{
MyControlEventArgs retvals = new MyControlEventArgs(true,
txtName.Text,
txtAddress.Text,
txtCity.Text,
txtState.Text,
txtZip.Text);
if (sender == btnCancel)
{
retvals.IsOK = false;
}
if (OnButtonClick != null)
OnButtonClick(this, retvals);
}
Создание свойств
Оставшаяся часть класса просто предоставляет свойства, которые соответствуют глобальным переменным, которые описаны выше. При изменении свойства метод доступа set изменяет внешний вид страницы, изменив соответствующие свойства элемента и обновив базовые глобальные переменные.
Добавьте следующий код к классу Page1.
public FontWeight MyControl_FontWeight
{
get { return _fontWeight; }
set
{
_fontWeight = value;
nameLabel.FontWeight = value;
addressLabel.FontWeight = value;
cityLabel.FontWeight = value;
stateLabel.FontWeight = value;
zipLabel.FontWeight = value;
}
}
public double MyControl_FontSize
{
get { return _fontSize; }
set
{
_fontSize = value;
nameLabel.FontSize = value;
addressLabel.FontSize = value;
cityLabel.FontSize = value;
stateLabel.FontSize = value;
zipLabel.FontSize = value;
}
}
public FontStyle MyControl_FontStyle
{
get { return _fontStyle; }
set
{
_fontStyle = value;
nameLabel.FontStyle = value;
addressLabel.FontStyle = value;
cityLabel.FontStyle = value;
stateLabel.FontStyle = value;
zipLabel.FontStyle = value;
}
}
public FontFamily MyControl_FontFamily
{
get { return _fontFamily; }
set
{
_fontFamily = value;
nameLabel.FontFamily = value;
addressLabel.FontFamily = value;
cityLabel.FontFamily = value;
stateLabel.FontFamily = value;
zipLabel.FontFamily = value;
}
}
public SolidColorBrush MyControl_Background
{
get { return _background; }
set
{
_background = value;
rootElement.Background = value;
}
}
public SolidColorBrush MyControl_Foreground
{
get { return _foreground; }
set
{
_foreground = value;
nameLabel.Foreground = value;
addressLabel.Foreground = value;
cityLabel.Foreground = value;
stateLabel.Foreground = value;
zipLabel.Foreground = value;
}
}
Отправка данных обратно на узел
Завершающим компонентом в файле является класс MyControlEventArgs, который используется для отправки собранных данных обратно на узел. Добавьте следующий код к пространству имен MyControls. Реализация является простой и далее не рассматривается.
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; }
}
}
Реализация ведущего приложения Windows Forms
Для размещения страницы WPF в форме ведущее приложение Windows Forms использует объект ElementHost. Для получения данных из формы приложение обрабатывает событие OnButtonClick страницы. Приложение также содержит набор переключателей, которые можно использовать для изменения внешнего вида страницы. На следующем рисунке показана отображаемая форма.
Страница Windows Presentation Foundation, размещенная в приложении Windows Forms
Создание проекта
Чтобы запустить проект, выполните следующие действия.
Запустите приложение Visual Studio и откройте диалоговое окно Создать проект.
Выберите Проекты C# с шаблоном Приложение Windows Forms.
Назовите новый проект WFHost и поместите его в ту же папку верхнего уровня, в которой содержится проект MyControls. Нажмите кнопку ОК, чтобы создать проект.
Также необходимо добавить ссылку на библиотеку DLL, содержащую страницу WPF:
Щелкните имя проекта в обозревателе решений и выберите Добавить ссылку.
Щелкните вкладку Обзор и перейдите к папке, которая содержит файл MyControls.dll.
Выберите файл MyControls.dll и нажмите кнопку ОК, чтобы добавить библиотеку DLL к списку ссылок.
В обозревателе решений добавьте ссылку на сборку WindowsFormsIntegration с именем WindowsFormsIntegration.dll.
Реализация разработки пользовательского интерфейса формы
Откройте конструктор Windows Forms и выполните разметку формы, как показано на рисунке в разделе Реализация ведущего приложения Windows Forms:
Разверните форму по умолчанию, чтобы разместить элементы управления и страницу WPF.
Добавьте элемент управления System.Windows.Forms.Panel в правый верхний угол формы для удержания страницы WPF.
Добавьте шесть наборов элементов управления System.Windows.Forms.RadioButton, как показано на рисунке.
Добавьте пять элементов управления System.Windows.Forms.Label в правый нижний угол формы, как показано на рисунке. Эти элементы управления действуют как метки данных, возвращаемых элементом управления WPF.
Добавьте элемент управления Label справа от каждого элемента управления Label, который был добавлен на предыдущем шаге. Установите для свойства Text каждого элемента управления значение "". Эти элементы управления отображают данные, возвращенные элементом управления WPF.
Добавьте элемент управления Label, который будет служить заголовком для группы элементов управления, добавленных в последних двух шагах. Поскольку элемент Label будет служить заголовком для группы, увеличьте размер шрифта на два пункта по отношению к элементам управления в группе.
Инициализация формы
Код размещения обычно реализуется в обработчике событий Load формы. В конструкторе Windows Forms дважды щелкните форму, чтобы создать метод обработчика событий Load. Следующий пример кода включает обработчик событий Load примера, обработчик событий Loaded страницы WPF и объявления нескольких глобальных переменных, которые будут использованы позже. Замените код в файле Form1.cs следующим кодом:
partial class Form1 : Form
{
private ElementHost ctrlHost;
private MyControls.Page1 wpfAddressCtrl;
System.Windows.FontWeight initFontWeight;
double initFontSize;
System.Windows.FontStyle initFontStyle;
System.Windows.Media.SolidColorBrush initBackBrush;
System.Windows.Media.SolidColorBrush initForeBrush;
FontFamily initFontFamily;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ctrlHost = new ElementHost();
ctrlHost.Dock = DockStyle.Fill;
panel1.Controls.Add(ctrlHost);
wpfAddressCtrl = new MyControls.Page1();
wpfAddressCtrl.InitializeComponent();
ctrlHost.Child = wpfAddressCtrl;
wpfAddressCtrl.OnButtonClick +=
new MyControls.Page1.MyControlEventHandler(
avAddressCtrl_OnButtonClick);
wpfAddressCtrl.Loaded += new RoutedEventHandler(
avAddressCtrl_Loaded);
}
void avAddressCtrl_Loaded(object sender, EventArgs e)
{
initBackBrush = (SolidColorBrush)wpfAddressCtrl.MyControl_Background;
initForeBrush = wpfAddressCtrl.MyControl_Foreground;
initFontFamily = wpfAddressCtrl.MyControl_FontFamily;
initFontSize = wpfAddressCtrl.MyControl_FontSize;
initFontWeight = wpfAddressCtrl.MyControl_FontWeight;
initFontStyle = wpfAddressCtrl.MyControl_FontStyle;
}
Метод Form1_Load в предыдущем примере кода показывает общую процедуру размещения элемента управления WPF.
Создайте новый объект ElementHost.
Присвойте свойству Dock элемента управления значение DockStyle.Fill.
Добавьте элемент управления ElementHost к коллекции Controls элементов управления Panel.
Создайте экземпляр страницы WPF.
Разместите страницу в форме путем назначения страницы свойству Child элемента управления ElementHost.
Остальные две строки в методе Form1_Load присоединяют обработчики к двум событиям страницы:
OnButtonClick — пользовательское событие, активизируемое на странице при нажатии кнопки ОК или Отмена. Обработайте событие для получения ответа пользователя и сбора всех данные, которые ввел пользователь.
Loaded — стандартное событие, которое вызывается страницей WPF, когда она полностью загружена. Это событие здесь используется потому, что пример требует инициализации нескольких глобальных переменных с помощью свойств страницы. Во время события Load формы страница не полностью загружена, и для этих параметров все еще остается значение null. Перед тем как можно будет получить доступ к этим свойствам, необходимо дождаться, когда произойдет событие Loaded страницы.
Обработчик событий Loaded показан в предыдущем примере кода. Обработчик OnButtonClick рассматривается в следующем разделе.
Обработка события OnButtonClick
Событие OnButtonClick происходит, когда пользователь нажимает кнопку ОК или Отмена.
Обработчик событий проверяет поле IsOK аргумента события, чтобы определить, какая кнопка была нажата. Переменные lbldata соответствуют скрытым элементам управления Label, которые были описанные выше. Если пользователь нажимает кнопку ОК, данные из элементов управления TextBox страницы назначаются соответствующему элементу управления Label. Если пользователь нажимает кнопку Отмена, для свойств Text устанавливаются значения null.
Добавьте следующий код в файл Form1.cs. Теперь можно скомпилировать и запустить приложение.
void avAddressCtrl_OnButtonClick(
object sender,
MyControls.MyControlEventArgs args)
{
if (args.IsOK)
{
lblAddress.Text = "Street Address: " + args.MyStreetAddress;
lblCity.Text = "City: " + args.MyCity;
lblName.Text = "Name: " + args.MyName;
lblState.Text = "State: " + args.MyState;
lblZip.Text = "Zip: " + args.MyZip;
}
else
{
lblAddress.Text = "Street Address: ";
lblCity.Text = "City: ";
lblName.Text = "Name: ";
lblState.Text = "State: ";
lblZip.Text = "Zip: ";
}
}
Изменение внешнего вида страницы Windows Presentation Foundation
Элементы управления RadioButton в левой части формы позволяют пользователю изменять цвет шрифта и фона страницы WPF, а также другие свойства шрифта. Цвет фона предоставляется объектом ElementHost. Остальные свойства предоставляются как настраиваемые свойства страницы.
Дважды щелкните элементы управления RadioButton в форме, чтобы создать шаблоны соответствующих обработчиков событий CheckedChanged. Извлеките код из следующих обработчиков и добавьте его к соответствующим обработчикам в файле Form1.cs.
private void radioBackgroundOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Background = initBackBrush;
}
private void radioBackgroundLightGreen_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Background = new SolidColorBrush(Colors.LightGreen);
}
private void radioBackgroundLightSalmon_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Background = new SolidColorBrush(Colors.LightSalmon);
}
private void radioForegroundOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Foreground = initForeBrush;
}
private void radioForegroundRed_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Foreground = new System.Windows.Media.SolidColorBrush(Colors.Red);
}
private void radioForegroundYellow_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_Foreground = new System.Windows.Media.SolidColorBrush(Colors.Yellow);
}
private void radioFamilyOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontFamily = initFontFamily;
}
private void radioFamilyTimes_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontFamily = new FontFamily("Times New Roman");
}
private void radioFamilyWingDings_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontFamily = new FontFamily("WingDings");
}
private void radioSizeOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontSize = initFontSize;
}
private void radioSizeTen_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontSize = 10;
}
private void radioSizeTwelve_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontSize = 12;
}
private void radioStyleOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontStyle = initFontStyle;
}
private void radioStyleItalic_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontStyle = System.Windows.FontStyles.Italic;
}
private void radioWeightOriginal_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontWeight = initFontWeight;
}
private void radioWeightBold_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontWeight = FontWeights.Bold;
}