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

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.

Перейти на страницу:

Похожие книги