首页 > 其他分享 >WPF LogicalTree VisualTree

WPF LogicalTree VisualTree

时间:2024-12-24 14:58:03浏览次数:3  
标签:LogicalTree Windows System MainWindow child using WPF public VisualTree

<Window x:Class="WpfApp94.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp94"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Button Grid.Column="0"
                Content="Logical Tree"
                Click="Button_Click"/>
        <Button Grid.Column="1"
                Content="Visual Tree"
                Click="Button_Click_1"/>
        <ListBox Grid.Row="1"
                 Grid.Column="0"
                 x:Name="logicalTree"/>
        <ListBox Grid.Row="1"
                 Grid.Column="1"
                 x:Name="visualTree"/>
    </Grid>
</Window>



using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp94
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            PrintLogicalTree(this);
        }

        public void PrintLogicalTree(object obj)
        {
            try
            {
                if (!(obj is DependencyObject))
                {
                    return;
                }
                
                foreach (object child in LogicalTreeHelper.GetChildren((DependencyObject)obj))
                {
                    if (child != null)
                    {
                        logicalTree.Items.Add(child.GetType().Name);
                        Console.WriteLine(child.GetType().Name);
                        PrintLogicalTree(child);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);                
            }           
        }

        public void PrintVisualTree(DependencyObject parent)
        {
            for(int i=0;i<VisualTreeHelper.GetChildrenCount(parent);i++)
            {
                var child=VisualTreeHelper.GetChild(parent,i);
                if(child!=null)
                {
                    visualTree.Items.Add(child.GetType().Name);
                    PrintVisualTree(child);
                }
            }
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            PrintVisualTree(this);
        }

       
    }
}

 

 

 

 

标签:LogicalTree,Windows,System,MainWindow,child,using,WPF,public,VisualTree
From: https://www.cnblogs.com/Fred1987/p/18627496

相关文章

  • DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(二)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • WPF LinearGradientBrush SpreadMethod,Pad,Reflect,Repeat
    <Windowx:Class="WpfApp91.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • WPF LinearGradientBrush StartPoint EndPoint
    <Windowx:Class="WpfApp92.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • WPF HitTestResult
    usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Windows.Navigation;......
  • WPF实现加载的动态效果
         思路:1.创建一个画布,长宽100*100;<CanvasWidth="100"Height="100">2.画布上创建一个圆,直径25,位于正上方中间,底色浅灰;<StyleTargetType="Ellipse"><SetterProperty="Width"Value="25"/>......
  • Wpf Prism中添加新控件的区域适配器
    上节中我们讲了怎么样定义一个区域与区域引用视图,但并不是所有的组件都支持组件当作区域使用,比如StackPanel就不支持当作区域来使用:我们自接使用会报以下错误,这时候我们就要自定义一个区域适配器: 1.首先我们创建一个StackPanelRegionAdapter的类:1usingPrism.Regions;2......
  • wpf Prism中区域的使用
    1.首先,我们创建一个区域内容,这里我们创建一个ViewA使用UseControl这个就是普通的UseControl,只是加了个TextBlock,显示ViewAViewA.xaml1<UserControlx:Class="MyTest.ViewA"2xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"3......
  • Wpf加入Prism框架
          Prism是一个开源框架,用于在WPF、XamarinForms、Uno/WinUI等应用中创建松耦合、可维护、可测试的XAML应用程序。Prism提供了一组设计模式的实现,这些设计模式有助于编写结构良好且可维护的XAML应用程序,包括MVVM,dependencyinjection,commands,EventAggregator等......
  • WPF DrawingVisual DrawingContext DrawImage RenderTargetBitmap
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;......
  • 一个使用 WPF 开发的管理系统
    一个使用WPF开发的管理系统 思维导航前言WPF介绍项目技术栈项目源码结构项目运行截图项目源码地址优秀项目和框架精选前言最近发现有不少小伙伴在学习 WPF,今天大姚给大家分享一个使用WPF开发的管理系统,该项目包含了用户登录、人员管理、角色授权、插件管......