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

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

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

На заметку! Элементы управления WPF часто описывают как лишенные внешности. Это относится к тому факту, что внешний вид элемента управления WPF совершенно не зависит от его поведения и допускает настройку.

Программное инспектирование логического дерева

Хотя анализ логического дерева окна во время выполнения — не слишком распространенное действие при программировании с применением WPF, полезно упомянуть о том, что в пространстве имен System.Windows определен класс LogicalTreeHelper, который позволяет инспектировать структуру логического дерева во время выполнения. Для иллюстрации связи между логическими деревьями, визуальными деревьями и шаблонами элементов управления создайте новый проект приложения WPF по имени TreesAndTemplatesApp.

Замените элемент Grid приведенной ниже разметкой, которая содержит два элемента управления Button и крупный допускающий только чтение элемент TextBox с включенными линейками прокрутки. Создайте в IDE-среде обработчики событий Click для каждой кнопки. Вот результирующая разметка XAML:

&lt;DockPanel LastChildFill=&quot;True&quot;&gt;

  &lt;Border Height=&quot;50&quot; DockPanel.Dock=&quot;Top&quot; BorderBrush=&quot;Blue&quot;&gt;

    &lt;StackPanel Orientation=&quot;Horizontal&quot;&gt;

      &lt;Button x:Name=&quot;btnShowLogicalTree&quot; Content=&quot;Logical Tree of Window&quot;

          Margin=&quot;4&quot; BorderBrush=&quot;Blue&quot; Height=&quot;40&quot;

          Click=&quot;btnShowLogicalTree_Click&quot;/&gt;

      &lt;Button x:Name=&quot;btnShowVisualTree&quot; Content=&quot;Visual Tree of Window&quot;

          BorderBrush=&quot;Blue&quot; Height=&quot;40&quot; Click=&quot;btnShowVisualTree_Click&quot;/&gt;

    &lt;/StackPanel&gt;

  &lt;/Border&gt;

  &lt;TextBox x:Name=&quot;txtDisplayArea&quot; Margin=&quot;10&quot;

    Background=&quot;AliceBlue&quot; IsReadOnly=&quot;True&quot;

    BorderBrush=&quot;Red&quot; VerticalScrollBarVisibility=&quot;Auto&quot;

    HorizontalScrollBarVisibility=&quot;Auto&quot; /&gt;

&lt;/DockPanel&gt;

Внутри файла кода C# определите переменную-член _dataToShow типа string. В обработчике события Click объекта btnShowLogicalTree вызовите вспомогательную функцию,которая продолжит вызывать себя рекурсивно с целью заполнения строковой переменной логическим деревом Window. Для этого будет вызван статический метод GetChildren() объекта LogicalTreeHelper. Ниже показан необходимый код:

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

private string _dataToShow=string.Empty;

private void btnShowLogicalTree_Click(object sender, RoutedEventArgs e)

{

  _dataToShow=&quot;&quot;;

  BuildLogicalTree(0, this);

  txtDisplayArea.Text=_dataToShow;

}

void BuildLogicalTree(int depth, object obj)

{

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

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

  // Если элемент - не DependencyObject, тогда пропустить его.

  if (!(obj is DependencyObject))

    return;

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

  foreach (var child in LogicalTreeHelper.GetChildren((DependencyObject)obj))

  {

      BuildLogicalTree(depth + 5, child);

  }

}

private void btnShowVisualTree_Click(

  object sender, RoutedEventArgs e)

{

}

После запуска приложения и щелчка на кнопке Logical Tree of Window (Логическое дерево окна) в текстовой области отобразится древовидное представление, которое выглядит почти как точная копия исходной разметки XAML (рис. 27.10).

Программное инспектирование визуального дерева

Визуальное дерево объекта Window также можно инспектировать во время выполнения с использованием класса VisualTreeHelper из пространства имен System.Windows.Media. Далее приведена реализация обработчика события Click для второго элемента управления Button (btnShowVisualTree), которая выполняет похожую рекурсивную логику с целью построения текстового представления визуального дерева:

using System.Windows.Media;

private void btnShowVisualTree_Click(object sender, RoutedEventArgs e)

{

  _dataToShow=&quot;&quot;;

  BuildVisualTree(0, this);

  txtDisplayArea.Text=_dataToShow;

}

void BuildVisualTree(int depth, DependencyObject obj)

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