Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

// Получить стандартный шаблон элемента Button.

Button myBtn=new Button;

ControlTemplate template=myBtn.Template;

Подобным же образом можно создать в коде новый объект

ControlTemplate
и подключить его к свойству
Template
элемента управления:

// Подключить новый шаблон для использования в кнопке.

Button myBtn=new Button;

ControlTemplate customTemplate=new ControlTemplate;

//
Предположим, что этот метод добавляет весь код для звездообразного шаблона.

MakeStarTemplate(customTemplate);

myBtn.Template=customTemplate;

Наряду с тем, что новый шаблон можно строить в коде, намного чаще это делается в разметке XAML. Тем не менее, прежде чем приступить к построению собственных шаблонов, завершите текущий пример и добавьте возможность просмотра стандартного шаблона для элемента управления WPF во время выполнения, что может оказаться полезным способом ознакомления с общей структурой шаблона Добавьте в разметку окна новую панель

StackPanel
с элементами управления; она стыкована с левой стороной главной панели
DockPanel
(находится прямо перед элементом
<TextBox>
) и определена следующим образом:

<Border DockPanel.Dock="Left" Margin="10" BorderBrush="DarkGreen"

BorderThickness="4"
Width="358">

<StackPanel>

<Label Content="Enter Full Name of WPF Control" Width="340"

FontWeight="DemiBold" />

<TextBox x:Name="txtFullName" Width="340" BorderBrush="Green"

Background="BlanchedAlmond" Height="22"

Text="System.Windows.Controls.Button" />

<Button x:Name="btnTemplate" Content="See Template" BorderBrush="Green"

Height="40" Width="100" Margin="5" Click="btnTemplate_Click"

HorizontalAlignment="Left" />

<Border BorderBrush="DarkGreen" BorderThickness="2" Height="260"

Width="301" Margin="10" Background="LightGreen" >

<StackPanel x:Name="stackTemplatePanel" />

</Border>

</StackPanel>

</Border>

Добавьте пустой обработчик события

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.

XamlWriter.Save(_ctrlToExamine.Template, xWriter);

// Отобразить разметку XAML в текстовом поле.

_dataToShow=strBuilder.ToString;

Поделиться:
Популярные книги

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Газлайтер. Том 14

Володин Григорий Григорьевич
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 14

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.00
рейтинг книги
Ермак. Телохранитель

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Идеальный мир для Лекаря 19

Сапфир Олег
19. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 19

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV

Идеальный мир для Лекаря 22

Сапфир Олег
22. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 22

Попаданка в академии драконов 4

Свадьбина Любовь
4. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.47
рейтинг книги
Попаданка в академии драконов 4

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад