Читаем Язык программирования C#9 и платформа .NET5 полностью

  _dataToShow +=new string(' ', depth) + obj.GetType().Name + "\n";

  // Выполнить рекурсивный вызов для каждого визуального дочернего элемента.

  for (int i=0; i < VisualTreeHelper.GetChildrenCount(obj); i++)

   {

    BuildVisualTree(depth + 1, VisualTreeHelper.GetChild(obj, i));

  }

}

На рис. 27.11 видно, что визуальное дерево открывает доступ к нескольким низкоуровневым агентам визуализации, таким как ContentPresenter, AdornerDecorator, TextBoxLineDrawingVisual и т.д.

<p id="AutBody_Root1244"><strong>Программное инспектирование стандартного шаблона элемента управления</strong></p>

Вспомните, что визуальное дерево применяется инфраструктурой WPF для выяснения, каким образом визуализировать элемент Window и все содержащиеся в нем элементы. Каждый элемент управления WPF хранит собственный набор команд визуализации внутри своего стандартного шаблона. С точки зрения программирования любой шаблон может быть представлен как экземпляр класса ControlTemplate. Кроме того, стандартный шаблон элемента управления можно получить через свойство Template:

// Получить стандартный шаблон элемента 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 (находится прямо перед элементом ) и определена следующим образом:

    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)

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных