WPF - Visual调试工具Snoop

原文: WPF - Visual调试工具Snoop

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

运行Snoop

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

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

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

img9.jpg

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

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

界面面板介绍

可视元素列表(Visual Tree View)

TreeViewD.PNG

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

PropertyViewD.PNG

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

事件视图(RoutedEvents View)

EventsViewD.PNG            

预览窗口(Preview Area

PreviewD.PNG

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

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

Zoomer.PNG       imgA.jpg

调试实例

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

问题:

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

2009112008212526.jpg

解决:
  1. 因为看上去有点像splitter控件,所以以为splitter位置出现问题,我把ListDetailForm.xaml列表和明细之间使用ResizingPanel代替Grid,也不是splitter了
    ContractedBlock.gif ExpandedBlockStart.gif 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>
    ContractedBlock.gif ExpandedBlockStart.gif 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绑定一下就可以解决了
    ContractedBlock.gif ExpandedBlockStart.gif 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/ ]

posted on 2014-05-22 20:51 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3746446.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值