Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 548 549 550 551 552 553 554 555 556 ... 642
Перейти на страницу:

{

  // Добавить имя типа к переменной-члену _dataToShow.

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

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

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

   {

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

  }

}

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

Программное инспектирование стандартного шаблона элемента управления

Вспомните, что визуальное дерево применяется инфраструктурой 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 (находится прямо перед элементом &lt;TextBox&gt;) и определена следующим образом:

&lt;Border DockPanel.Dock=&quot;Left&quot; Margin=&quot;10&quot; BorderBrush=&quot;DarkGreen&quot;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    BorderThickness=&quot;4&quot; Width=&quot;358&quot;&gt;

  &lt;StackPanel&gt;

    &lt;Label Content=&quot;Enter Full Name of WPF Control&quot; Width=&quot;340&quot;

        FontWeight=&quot;DemiBold&quot; /&gt;

    &lt;TextBox x:Name=&quot;txtFullName&quot; Width=&quot;340&quot; BorderBrush=&quot;Green&quot;

        Background=&quot;BlanchedAlmond&quot; Height=&quot;22&quot;

        Text=&quot;System.Windows.Controls.Button&quot; /&gt;

    &lt;Button x:Name=&quot;btnTemplate&quot; Content=&quot;See Template&quot; BorderBrush=&quot;Green&quot;

        Height=&quot;40&quot; Width=&quot;100&quot; Margin=&quot;5&quot; Click=&quot;btnTemplate_Click&quot;

        HorizontalAlignment=&quot;Left&quot; /&gt;

    &lt;Border BorderBrush=&quot;DarkGreen&quot; BorderThickness=&quot;2&quot; Height=&quot;260&quot;

        Width=&quot;301&quot; Margin=&quot;10&quot; Background=&quot;LightGreen&quot; &gt;

        &lt;StackPanel x:Name=&quot;stackTemplatePanel&quot; /&gt;

    &lt;/Border&gt;

  &lt;/StackPanel&gt;

&lt;/Border&gt;

Добавьте пустой обработчик события 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=&quot;&quot;;

  ShowTemplate();

  txtDisplayArea.Text=_dataToShow;

1 ... 548 549 550 551 552 553 554 555 556 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга