Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Windows Presentation Foundation (WPF) предоставляет многофункциональную среду для создания приложений. Однако если у вас есть существенные инвестиции в код Windows Forms, это может быть более эффективным для расширения существующего приложения Windows Forms с помощью WPF, а не для перезаписи его с нуля. Типичным сценарием является внедрение одного или нескольких элементов управления, реализованных с помощью WPF в приложении Windows Forms. Дополнительные сведения о настройке элементов управления WPF см. в разделе Настройка элементов управления.
В этом пошаговом руководстве рассматривается приложение, размещающее составной элемент управления WPF для ввода данных в Windows Forms. Составной элемент управления упаковается в библиотеку DLL. Эта общая процедура может быть расширена до более сложных приложений и элементов управления. Это пошаговое руководство предназначено быть почти идентичным по внешнему виду и функциональности пошаговому руководству «Размещение составного элемента управления Windows Forms в WPF». Основное различие заключается в том, что сценарий размещения выполняется в обратном порядке.
Пошаговое руководство разделено на два раздела. В первом разделе кратко описывается реализация составного элемента управления WPF. Второй раздел подробно описывает размещение составного элемента управления в приложении Windows Forms, получение событий из элемента управления и доступ к некоторым свойствам элемента управления.
Задачи, показанные в этом пошаговом руководстве, включают:
Реализация составного элемента управления WPF.
Реализация ведущего приложения Windows Forms.
Полный список кода задач, показанных в этом пошаговом руководстве, см. в Размещение составного элемента управления WPF в примере Windows Forms.
Предпосылки
Для выполнения этого пошагового руководства вам потребуется Visual Studio.
Реализация составного элемента управления WPF
Составной элемент управления WPF, используемый в этом примере, представляет собой простую форму ввода данных, которая принимает имя и адрес пользователя. Когда пользователь нажимает одну из двух кнопок, чтобы указать, что задача завершена, элемент управления вызывает пользовательское событие, чтобы вернуть эти сведения хосту. На следующем рисунке показан отрисованный элемент управления.
На следующем рисунке показан составной элемент управления WPF:
Создание проекта
Чтобы запустить проект, выполните следующие действия.
Запустите Visual Studio и откройте диалоговое окно создания проекта.
В Visual C# и категории Windows выберите шаблон библиотеки пользовательского элемента управления WPF.
Назовите новый проект
MyControls
.Для расположения укажите удобно именованную папку верхнего уровня, например
WindowsFormsHostingWpfControl
. Позже вы поместите в эту папку хост-приложение.Нажмите кнопку ОК, чтобы создать проект. Проект по умолчанию содержит один элемент управления с именем
UserControl1
.В обозревателе решений переименуйте
UserControl1
вMyControl1
.
Проект должен иметь ссылки на следующие системные библиотеки DLL. Если любой из этих библиотек DLL не включен по умолчанию, добавьте их в проект.
PresentationCore
PresentationFramework
Система
WindowsBase
Создание пользовательского интерфейса
Пользовательский интерфейс для составного элемента управления реализуется с помощью языка разметки расширяемых приложений (XAML). Составной пользовательский интерфейс состоит из пяти элементов TextBox. Каждый элемент TextBox имеет связанный элемент TextBlock, который служит меткой. Внизу находятся два элемента Button: ОК и Отмена. Когда пользователь нажимает любую кнопку, элемент управления вызывает пользовательское событие, чтобы вернуть информацию хосту.
Базовый макет
Различные элементы пользовательского интерфейса содержатся в элементе Grid. Вы можете использовать Grid для упорядочивания содержимого составного элемента управления так же, как и элемент Table
в HTML. WPF также имеет элемент Table, но Grid более упрощенный и лучше подходит для простых задач макета.
В следующем коде XAML показан базовый макет. Этот XAML определяет общую структуру элемента управления, указав количество столбцов и строк в элементе Grid.
В MyControl1.xaml замените существующий XAML на следующий XAML.
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyControls.MyControl1"
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>
</Grid>
Добавление элементов TextBlock и TextBox в сетку
Вы помещаете элемент пользовательского интерфейса в сетку, задав атрибуты RowProperty и ColumnProperty в соответствующие номер строки и номер столбца. Помните, что нумеровка строк и столбцов основана на нулях. Элемент может охватывать несколько столбцов, задав его атрибут ColumnSpanProperty. Дополнительные сведения о элементах Grid см. в статье Создание элемента Сетки.
В следующем XAML показаны элементы TextBox и TextBlock составного элемента управления с их атрибутами RowProperty и ColumnProperty, которые заданы для правильного размещения этих элементов в сетке.
В MyControl1.xaml добавьте следующий код 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"/>
Стилизация элементов пользовательского интерфейса
Многие элементы в форме записи данных имеют аналогичный внешний вид, что означает, что они имеют одинаковые параметры для нескольких их свойств. Вместо того чтобы задавать атрибуты каждого элемента отдельно, предыдущий XAML использует элементы Style для определения стандартных параметров свойств для классов элементов. Этот подход снижает сложность элемента управления и позволяет изменять внешний вид нескольких элементов с помощью одного атрибута стиля.
Элементы Style содержатся в свойстве Grid элемента Resources, поэтому их можно использовать всеми элементами в элементе управления. Если стиль называется, его следует применить к элементу, добавив элемент Style, заданный в имя стиля. Стили, которые не называются, становятся стилем по умолчанию для элемента. Дополнительные сведения о стилях WPF см. в разделах Стилизация и шаблоны.
В следующем XAML показаны элементы Style для составного элемента управления. Чтобы увидеть, как стили применяются к элементам, см. предыдущий XAML. Например, последний элемент TextBlock имеет стиль inlineText
, а последний элемент TextBox использует стиль по умолчанию.
В MyControl1.xaml добавьте следующий XAML непосредственно после начального элемента Grid.
<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>
Добавление кнопок "ОК" и "Отмена"
Финальные элементы на составном элементе управления — это элементы OK и ОтменаButton, которые занимают первые два столбца последней строки Grid. Эти элементы используют общий обработчик событий, ButtonClicked
и стиль Button по умолчанию, определенный в предыдущем XAML.
В MyControl1.xaml добавьте следующий код 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>
Реализация файла Code-Behind
Файл программной части MyControl1.xaml.cs реализует три основные задачи:
Обрабатывает событие, возникающее при нажатии одной из кнопок.
Извлекает данные из элементов TextBox и упаковает их в объект аргумента пользовательского события.
Вызывает пользовательское событие
OnButtonClick
, которое уведомляет хоста о том, что пользователь завершил работу, и передает данные обратно хосту.
Элемент управления также предоставляет ряд свойств цвета и шрифта, которые позволяют изменять внешний вид. В отличие от класса WindowsFormsHost, который используется для размещения элемента управления Windows Forms, класс ElementHost предоставляет только свойство Background элемента управления. Чтобы сохранить сходство между этим примером кода и примером, рассмотренным в пошаговом руководстве: "Размещение составного элемента управления Windows Forms в WPF", элемент управления напрямую предоставляет остальные свойства.
Базовая структура файла Code-Behind
Файл программной части состоит из одного пространства имен, MyControls
, который будет содержать два класса, MyControl1
и MyControlEventArgs
.
namespace MyControls
{
public partial class MyControl1 : Grid
{
//...
}
public class MyControlEventArgs : EventArgs
{
//...
}
}
Первый класс, MyControl1
, — это частичный класс, содержащий код, реализующий функциональные возможности пользовательского интерфейса, определенного в MyControl1.xaml. При синтаксическом анализе MyControl1.xaml XAML преобразуется в один и тот же частичный класс, а два частичных класса объединяются для формирования скомпилированного элемента управления. По этой причине имя класса в файле code-behind должно соответствовать имени класса, назначенному MyControl1.xaml, и оно должно наследоваться от корневого элемента элемента управления. Второй класс, MyControlEventArgs
, — это класс аргументов событий, который используется для отправки данных обратно хосту.
Откройте MyControl1.xaml.cs. Измените существующее объявление класса так, чтобы оно имело следующее имя и наследовалось от Grid.
public partial class MyControl1 : Grid
Инициализация элемента управления
Следующий код реализует несколько основных задач:
Объявляет частное событие
OnButtonClick
и связанный с ним делегатMyControlEventHandler
.Создает несколько частных глобальных переменных, которые хранят данные пользователя. Эти данные предоставляются с помощью соответствующих свойств.
Реализует обработчик
Init
для события Loaded элемента управления. Этот обработчик инициализирует глобальные переменные, назначая им значения, определенные в MyControl1.xaml. Для этого используется Name, назначенный типичному элементу TextBlock,nameLabel
для доступа к параметрам свойств этого элемента.
Удалите существующий конструктор и добавьте следующий код в класс MyControl1
.
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
или btnCancel
, что позволяет обработчику определить, какая кнопка была нажата, проверив значение аргумента sender
. Обработчик выполняет следующие действия:
Создает объект
MyControlEventArgs
, содержащий данные из элементов TextBox.Если пользователь нажал кнопку "Отмена", то свойству
MyControlEventArgs
объектаIsOK
устанавливается значениеfalse
.Инициирует событие
OnButtonClick
для уведомления узла о том, что пользователь завершил работу, и передает обратно собранные данные.
Добавьте следующий код в класс MyControl1
после метода 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-аксессор изменяет внешний вид управляющего элемента, корректируя соответствующие свойства элементов и обновляя базовые глобальные переменные.
Добавьте следующий код в класс MyControl1
.
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; }
}
}
Создайте решение. Сборка создаст библиотеку DLL с именем MyControls.dll.
Реализация ведущего приложения Windows Forms
Ведущее приложение Windows Forms использует объект ElementHost для размещения составного элемента управления WPF. Приложение обрабатывает событие OnButtonClick
для получения данных из составного элемента управления. Приложение также имеет набор кнопок параметров, которые можно использовать для изменения внешнего вида элемента управления. На следующем рисунке показано приложение.
На следующем рисунке показан составной элемент управления WPF, размещенный в приложении Windows Forms
Создание проекта
Чтобы запустить проект, выполните следующие действия.
Запустите Visual Studio и откройте диалоговое окно создания проекта.
В Visual C# в категории Windows выберите шаблон Windows Forms Application.
Назовите новый проект
WFHost
.Для расположения укажите ту же папку верхнего уровня, которая содержит проект MyControls.
Нажмите кнопку ОК, чтобы создать проект.
Кроме того, необходимо добавить ссылки на библиотеку DLL, содержащую MyControl1
и другие сборки.
Щелкните правой кнопкой мыши имя проекта в Проводнике решений и выберите Добавить ссылку.
Перейдите на вкладку "Обзор
" и перейдите к папке, содержащей MyControls.dll. В этом пошаговом руководстве эта папка — MyControls\bin\Debug. Выберите MyControls.dll, а затем нажмите кнопку ОК.
Добавьте ссылки на следующие сборки.
PresentationCore
PresentationFramework
System.Xaml
WindowsBase
WindowsFormsIntegration (Интеграция Windows Forms)
Реализация пользовательского интерфейса для приложения
Пользовательский интерфейс приложения Windows Form содержит несколько элементов управления для взаимодействия с составным элементом управления WPF.
Откройте форму 1 в конструкторе форм Windows.
Увеличьте форму для размещения элементов управления.
В правом верхнем углу формы добавьте элемент управления System.Windows.Forms.Panel, чтобы держать композитный элемент управления WPF.
Добавьте следующие элементы управления System.Windows.Forms.GroupBox в форму.
Имя Текст groupBox1 Цвет фона groupBox2 Цвет переднего плана groupBox3 Размер шрифта groupBox4 Семейство шрифтов groupBox5 Стиль шрифта groupBox6 Вес шрифта groupBox7 Данные из элемента управления Добавьте следующие элементы управления System.Windows.Forms.RadioButton в элементы управления System.Windows.Forms.GroupBox.
GroupBox Имя Текст groupBox1 radioBackgroundOriginal Исходный текст groupBox1 радиоФонСветлоЗеленый Светло-зелёный groupBox1 radioBackgroundLightSalmon LightSalmon групБокс2 исходныйПервыйПланРадио Исходный текст groupBox2 radioForegroundRed Красный groupBox2 radioForegroundЖёлтый Жёлтый groupBox3 Исходный размер радио Исходный текст группБокс3 radioSizeTen 10 groupBox3 radioSizeTwelve 12 groupBox4 radioFamilyOriginal Исходный текст groupBox4 radioFamilyTimes Times New Roman groupBox4 radioFamilyWingDingDings WingDings groupBox5 radioStyleOriginal Нормальный groupBox5 radioStyleItalic Курсив groupBox6 radioWeightOriginal Исходный текст groupBox6 radioWeightBold Смелый Добавьте следующие элементы управления System.Windows.Forms.Label в последний System.Windows.Forms.GroupBox. Эти элементы управления отображают данные, возвращаемые составным элементом управления WPF.
GroupBox Имя Текст groupBox7 lblИмя Имя: groupBox7 lblAddress Адрес улицы: groupBox7 lblCity Город: groupBox7 lblState Государство: groupBox7 lblZip Молния:
Инициализация формы
Как правило, вы реализуете код хостинга в обработчике событий формы Load. В следующем коде показан обработчик событий Load, обработчик события Loaded составного элемента управления WPF и объявления для нескольких глобальных переменных, которые используются позже.
В конструкторе Windows Forms дважды щелкните форму, чтобы создать обработчик событий Load. В верхней части Form1.cs добавьте следующие директивы using
.
using System.Windows;
using System.Windows.Forms.Integration;
using System.Windows.Media;
Замените содержимое существующего класса Form1
следующим кодом.
private ElementHost ctrlHost;
private MyControls.MyControl1 wpfAddressCtrl;
System.Windows.FontWeight initFontWeight;
double initFontSize;
System.Windows.FontStyle initFontStyle;
System.Windows.Media.SolidColorBrush initBackBrush;
System.Windows.Media.SolidColorBrush initForeBrush;
System.Windows.Media.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.MyControl1();
wpfAddressCtrl.InitializeComponent();
ctrlHost.Child = wpfAddressCtrl;
wpfAddressCtrl.OnButtonClick +=
new MyControls.MyControl1.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 в коллекцию Panel элемента управления Controls.
Создайте экземпляр элемента управления WPF.
Разместите составной элемент управления на форме, назначив элемент управления свойству ElementHost элемента управления Child.
Оставшиеся две строки в методе Form1_Load
присоединяют обработчики к двум событиям элемента управления.
OnButtonClick
— это настраиваемое событие, которое запускается составным элементом управления, когда пользователь нажимает кнопку ОК или Отмена. Вы обрабатываете событие, чтобы получить ответ пользователя и собрать все данные, указанные пользователем.Loaded — это стандартное событие, которое вызывается элементом управления WPF при полной загрузке. Это событие используется здесь, так как в примере необходимо инициализировать несколько глобальных переменных с помощью свойств из элемента управления. Во время события Load формы элемент управления не полностью загружен, и эти значения по-прежнему имеют значение
null
. Необходимо ждать, пока событие Loaded элемента управления не произойдет, прежде чем получить доступ к этим свойствам.
Обработчик событий Loaded показан в предыдущем коде. Обработчик OnButtonClick
рассматривается в следующем разделе.
Обработчик события OnButtonClick
Событие OnButtonClick
возникает, когда пользователь нажимает кнопку ОК или "Отмена".
Обработчик событий проверяет поле IsOK
аргумента события, чтобы определить, какая кнопка была нажата. Переменные данных lbl
соответствуют элементам управленияLabel, которые обсуждались ранее. Если пользователь нажимает кнопку ОК, данные из элементов управления TextBox назначаются соответствующим элементам управления Label. Если пользователь щелкает Отмена, значения Text задаются в строках по умолчанию.
Добавьте следующий код обработчика событий нажатия кнопки в класс Form1
.
void avAddressCtrl_OnButtonClick(
object sender,
MyControls.MyControl1.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: ";
}
}
Создайте и запустите приложение. Добавьте текст в составной элемент управления WPF и нажмите кнопку ОК. Текст отображается в метках. На данный момент код для обработки радиокнопок не добавлен.
Изменение внешнего вида элемента управления
Элементы управления RadioButton в форме позволят пользователю изменить цвета переднего плана и фона составного элемента управления WPF, а также несколько характеристик шрифта. Цвет фона отображается объектом ElementHost. Остальные свойства предоставляются как настраиваемые свойства элемента управления.
Дважды щелкните по каждому элементу управления RadioButton на форме, чтобы создать обработчики событий CheckedChanged. Замените обработчики событий CheckedChanged следующим кодом.
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 System.Windows.Media.FontFamily("Times New Roman");
}
private void radioFamilyWingDings_CheckedChanged(object sender, EventArgs e)
{
wpfAddressCtrl.MyControl_FontFamily = new System.Windows.Media.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;
}
Создайте и запустите приложение. Щелкните различные радиокнопки, чтобы увидеть влияние на составной элемент управления WPF.
См. также
.NET Desktop feedback