// Подключить новый шаблон для использования в кнопке.
Button myBtn=new Button;
ControlTemplate customTemplate=new ControlTemplate;
// Предположим, что этот метод добавляет весь код для звездообразного шаблона.
MakeStarTemplate(customTemplate);
myBtn.Template=customTemplate;
Наряду с тем, что новый шаблон можно строить в коде, намного чаще это делается в разметке XAML. Тем не менее, прежде чем приступить к построению собственных шаблонов, завершите текущий пример и добавьте возможность просмотра стандартного шаблона для элемента управления WPF во время выполнения, что может оказаться полезным способом ознакомления с общей структурой шаблона Добавьте в разметку окна новую панель StackPanel
с элементами управления; она стыкована с левой стороной главной панели DockPanel
(находится прямо перед элементом
) и определена следующим образом:
BorderThickness="4"
Width="358">
FontWeight="DemiBold" />
Background="BlanchedAlmond" Height="22"
Text="System.Windows.Controls.Button" />
Height="40" Width="100" Margin="5" Click="btnTemplate_Click"
HorizontalAlignment="Left" />
Width="301" Margin="10" Background="LightGreen" >
Добавьте пустой обработчик события btnTemplate_Click
:
private void btnTemplate_Click(
object sender, RoutedEventArgs e)
{
}
Текстовая область слева вверху позволяет вводить полностью заданное имя элемента управления WPF, расположенного в сборке PresentationFramework.dll
. После того как библиотека загружена, экземпляр элемента управления динамически создается и отображается в большом квадрате слева внизу. Наконец, в текстовой области справа будет отображаться стандартный шаблон элемента управления. Добавьте в класс C# новую переменную-член типа Control
:
private Control _ctrlToExamine=null;
Ниже показан остальной код, который требует импортирования пространств имен System.Reflection.System.Xml
и System.Windows.Markup
:
private void btnTemplate_Click(
object sender, RoutedEventArgs e)
{
_dataToShow="";
ShowTemplate;
txtDisplayArea.Text=_dataToShow;
}
private void ShowTemplate
{
// Удалить элемент, который в текущий момент находится
// в области предварительного просмотра.
if (_ctrlToExamine !=null)
stackTemplatePanel.Children.Remove(_ctrlToExamine);
try
{
// Загрузить PresentationFramework и создать экземпляр
// указанного элемента управления. Установить его размеры для
// отображения, а затем добавить в пустой контейнер StackPanel.
Assembly asm=Assembly.Load("PresentationFramework, Version=4.0.0.0," +
"Culture=neutral, PublicKeyToken=31bf3856ad364e35");
_ctrlToExamine=(Control)asm.CreateInstance(txtFullName.Text);
_ctrlToExamine.Height=200;
_ctrlToExamine.Width=200;
_ctrlToExamine.Margin=new Thickness(5);
stackTemplatePanel.Children.Add(_ctrlToExamine);
// Определить настройки XML для предохранения отступов.
var xmlSettings=new XmlWriterSettings{Indent=true};
// Создать объект StringBuilder для хранения разметки XAML.
var strBuilder=new StringBuilder;
// Создать объект XmlWriter на основе имеющихся настроек.
var xWriter=XmlWriter.Create(strBuilder, xmlSettings);
// Сохранить разметку XAML в объекте XmlWriter на основе ControlTemplate.
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT