WPF - Visual调试工具Snoop

原文:WPF - Visual调试工具Snoop

  Snoop经过很长一段时间,最近更新到支持NET 3.5了,它是一个WPF运行时对Visual UI调试的一个工具,最近我用过它调试修改过一个bug,在此介绍给大家。Snoop可以在
Installer下载安装,它的代码也是公布的,可以在Download Source下载,感兴趣的也可以看看,我现在还没有看:)

运行Snoop

下载安装后,运行Snoop.exe后出现一个类似工具条的界面:

下拉框中显示的运行的WPF应用程序,如果还么有打开需要调试的程序,可以打开后再点击【刷新】按钮获取应用程序列表,选中应用程序后,点击Snoop图标()可以打开Snoop。

左边是可视化树列表,选中可视化元素后,右边中间显示该元素的属性,右边下面是元素的UI预览界面。

当选中元素后,目标应用程序的响应元素会高亮显示在一个红色边框内。

选中元素可以直接在列表中选择,也可以按住Ctrl-Shift后移动鼠标到目标应用程序的选择元素上。

界面面板介绍

可视元素列表(Visual Tree View)

  1. 当出现性能问题时可以查看一下子元素的数量,尽量使得子元素数量达到最小。
  2. 通过过滤文本框右边下拉控件可以查找错误的绑定。(在调试OpenExpressApp过程中,snoop会出现一些bug,而使得OEA程序关闭,原因不明)

属性面板(Property Grid)

我更新过属性值,但是好像没有反映到目标应用程序中去。

事件视图(RoutedEvents View)

            

预览窗口(Preview Area )

选择元素的预览界面,这个由于性能原因默认是关闭的,不过我每次都是打开它,因为可以立刻看到效果:)

放大视图(Zoom View)/3D Zoom View

 

      

调试实例

  在开发OpenExpressApp时,发现了一个比较UI上的bug,我就是借助Snoop进行调试解决的,以下是我遇到的问题。

问题:

在模块中,点击Grid中间区域会出现一列长条

解决:

  1. 因为看上去有点像splitter控件,所以以为splitter位置出现问题,我把ListDetailForm.xaml列表和明细之间使用ResizingPanel代替Grid,也不是splitter了

    Code
      <AvalonDock:DocumentContent Title="内容">
                                    <DockPanel>
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="3*"/>
                                                <ColumnDefinition Width="7*"/>
                                            </Grid.ColumnDefinitions>
                                            <GridSplitter Width="5" ></GridSplitter>
                                            <DockPanel Name="listRegion">
                                             </DockPanel>
                                             <DockPanel Name="detailRegion" Grid.Column="1">
                                            </DockPanel>
                                         </Grid>
                                    </DockPanel>
                                 </AvalonDock:DocumentContent>

    Code
      <AvalonDock:ResizingPanel>
                                        <DockPanel Name="listRegion" AvalonDock:ResizingPanel.ResizeWidth="3*">
                                        </DockPanel>
                                        <DockPanel Name="detailRegion" AvalonDock:ResizingPanel.ResizeWidth="7*">
                                        </DockPanel>
                                    </AvalonDock:ResizingPanel> 

  2. 发现问题依旧,这时就不知道是什么原因了,从样子看出来还会是什么东东。这时正好snoop发布了,就用了一把。打开snoop看到这个竖条原来是CSLA中的BusyAnimation。我在Grid中间放置了一个显示busy状态的控件,终于找到罪魁祸首了,原来是这个东东在捣乱。
    找到原因后就很好解决了,把BusyAnimation的VisibilityProperty绑定一下就可以解决了

    Code
                //绑定IsVisible
                Binding bdIsVisible = new Binding("IsBusy");
                bdIsVisible.Source = DataProvider;
                bdIsVisible.Converter = new BooleanToVisibilityConverter();
                bdIsVisible.BindsDirectlyToSource = true;
                busy.SetBinding(BusyAnimation.VisibilityProperty, bdIsVisible);

欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

时间: 2024-08-17 18:35:51

WPF - Visual调试工具Snoop的相关文章

2000条你应知的WPF小姿势 基础篇&lt;45-50 Visual Tree&amp;Logic Tree 附带两个小工具&gt;

原文:2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具> 在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C#  和 2,000 Things You Should Know About WPF .他以类似微博式的150字简短语言来每天更新一条WPF和C#重要又容易被遗忘的知识.Follo

超级简单:如何使用WPF Commands提升你的代码质量

介绍: WPF Commands是一种非常好的的方式去复用应用程序中功能.在本文提供的 示例中,创建了一个使用WPF的Command模式来对Customer进行排序的示例. WPFCommand模式非常适合用于在应用程序中的用不同控件调用相同的功能.WPF commands 也能适用于一些其他的情况,例如,如果输入有误,禁用控件.在文 章的CanExecute部分中,我们能进一步了解. 创建一个Command: 为了使用WPF commands,你必须声明静态的command.当你声明这个com

WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表

原文:WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要针对WPF项目开发中图片的各种使用问题,经过总结,把一些经验分享一下.内容包括: WPF常用图像数据源ImageSource的创建: 自定义缩略图控件ThumbnailImage,支持网络图片.大图片.图片异步加载

(收藏)搭建.NET Framework 3.0开发环境 及SharePoint 2007/WSS 3环境

第一步:首先您必须安装.NET Framework 3.0,则可以下载其Redistributable Package  Microsoft .NET Framework 3.0 Redistributable Package  第二步:Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components正式版 这是.NET 3.0程序开发的运行库,里面有你开发

使用Visual Studio 2010在WPF中构建数据驱动的大纲/细节业务表

概述 在本实验中,您将了解如何使用 Visual Studio 2010 工具在 WPF 4.0 中创建和自定义大纲/细节业务表. 目标 完成此实验后,您将学会: 如何在 WPF 项目中使用"Data Sources"窗口创建初始支架,以绑定您应用程序的数据 如何使用"Data Sources"窗口在现有 WPF 控件中"绘制"数据绑定 如何使用"Data Sources"窗口创建大纲/细节支架 如何自定义"Data

visual studio-c#+wpf怎么做出”以项目管理文件“的功能

问题描述 c#+wpf怎么做出"以项目管理文件"的功能 visual studio和netbeans这两个编程软件,虽然有很大的不同. 它们两个都有一个相似的功能:**操纵项目**,说的清楚点就是**以项目的形式处理文件夹的内容**,在项目里编写的代码或处理的内容都被记录,即使重装系统,也能重新安装软件并通过"打开项目"功能看到的内容都不会消失,我就是喜欢这一点,以一个项目管理一个文件夹"的功能. 我想在我的软件(正在设计规划中)实现以一个项目管理一个文件

visual studio-VS2015调试工具的使用

问题描述 VS2015调试工具的使用 使用VS2015查看各种生存期/作用域变量,包括形参/自动变量,静态局部/全局变量,外部全局变量的变化情况 解决方案 直接用local查看窗口,把你关心的变量拖进去

visual studio-新人救助WPF,为什么我已经写了using System.Windows却不能使用

问题描述 新人救助WPF,为什么我已经写了using System.Windows却不能使用 为什么我已经写了using System.Windows却不能使用DependencyObject类??? 而且为什么我所有的using都是灰色的,我下载的示例代码有两个using是亮的 解决方案 光using没用,要先添加引用(项目-添加引用).你创建的是winforms程序还是wpf程序还是控制台程序?

---请问Silverlight , WPF , Blend , Visual Studio .net 都什么关系?

问题描述 ---请问Silverlight,WPF,Blend,VisualStudio.net都什么关系? 解决方案 解决方案二:Silverlight是WPF的的简化版,主要是做基于网页的应用:Blend是Silverlight和WPF的专用开发中开发工具,主要是针对Xaml语言的开发:VisualStudio.net可以开发Silverlight和WPF,但它重要的是其它方面的开发,针对性没有Blend专一解决方案三:VisualStudio.net是开发平台,集成了Silverlight