Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На заметку! Элементы управления WPF часто описывают как лишенные внешности. Это относится к тому факту, что внешний вид элемента управления WPF совершенно не зависит от его поведения и допускает настройку.
Программное инспектирование логического дерева
Хотя анализ логического дерева окна во время выполнения — не слишком распространенное действие при программировании с применением WPF, полезно упомянуть о том, что в пространстве имен
System.WindowsLogicalTreeHelperTreesAndTemplatesAppЗамените элемент
GridButtonTextBoxClick<DockPanel LastChildFill="True"> <Border Height="50" DockPanel.Dock="Top" BorderBrush="Blue"> <StackPanel Orientation="Horizontal"> <Button x:Name="btnShowLogicalTree" Content="Logical Tree of Window" Margin="4" BorderBrush="Blue" Height="40" Click="btnShowLogicalTree_Click"/> <Button x:Name="btnShowVisualTree" Content="Visual Tree of Window" BorderBrush="Blue" Height="40" Click="btnShowVisualTree_Click"/> </StackPanel> </Border> <TextBox x:Name="txtDisplayArea" Margin="10" Background="AliceBlue" IsReadOnly="True" BorderBrush="Red" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" /></DockPanel>Внутри файла кода C# определите переменную-член
_dataToShowstringClickbtnShowLogicalTreeWindowGetChildren()LogicalTreeHelperprivate string _dataToShow=string.Empty;private void btnShowLogicalTree_Click(object sender, RoutedEventArgs e){ _dataToShow=""; BuildLogicalTree(0, this); txtDisplayArea.Text=_dataToShow;}void BuildLogicalTree(int depth, object obj){ // Добавить имя типа к переменной-члену _dataToShow. _dataToShow +=new string(' ', depth) + obj.GetType().Name + "n"; // Если элемент - не 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).

Программное инспектирование визуального дерева
Визуальное дерево объекта
WindowVisualTreeHelperSystem.Windows.MediaClickButtonbtnShowVisualTreeusing System.Windows.Media;private void btnShowVisualTree_Click(object sender, RoutedEventArgs e){ _dataToShow=""; BuildVisualTree(0, this); txtDisplayArea.Text=_dataToShow;}void BuildVisualTree(int depth, DependencyObject obj)