目标是显示任意对象的内容(不仅仅用于调试目的)。
进一步澄清:我不是在寻找任何调试工具或显示 WPF 可视树的方法。这个问题只与 WPF 有部分关系 -》 WPF 只是显示对象转储的媒介,因为控件可能在 WPF 和 WinForms 之间变化。
输出应为嵌套对象实例、列表等的分层结构。
我认为你应该看看Snoop
这个程序可以让您浏览任何正在运行的应用程序的WPF树。使用此工具不需要调试,可能该工具不适用于调试。通常我在非调试场景下使用它来查看我的WPF控件实际布局以及各种属性的值。
我已经寻找这个答案好几个月了;Snoop、Spy和其他工具都无法使用,因为存在线程所有权违规。
微软有一个Windows工具,允许您选择任何正在运行的UI元素并查看该元素的可访问性数据:
inspect.exe
https://msdn.microsoft.com/en-us/library/dd318521(VS.85).aspx
这个程序可以在Windows软件开发工具包中找到,需要先下载和安装,然后位于:
C:\Program Files\x86\(win-version)\bin\(cpu-architecture)\inspect.exe
所以你想要一个在运行时显示类的字段的控件。通过搜索“属性网格”,你会找到很多相关文章。虽然它不是直接符合你的需求,但这是一个好的开始。你需要通过反射迭代类的字段,并在ListView/TreeView中显示它们。但是,困难的部分在于确定哪些字段应该显示和隐藏,处理非常不同的类型和基元,并允许使用类型转换进行编辑(例如将字符串转换为Rect、point、color等),这是一个非常复杂的问题。 这个控件可能会给你一个很好的起点。
有各种不同的控件可以让您将属性查看为属性网格。
http://www.codeproject.com/Articles/87715/Native-WPF-4-PropertyGrid
https://wpftoolkit.codeplex.com/wikipage?title=PropertyGrid
根据其复杂性、许可证和功能,您将不得不选择其中一个,它们都是免费的。