ASP教程 PHP教程
返回首页

WPF树型表格列宽问题 由一个Bug引出的自动扩张

时间:2010-08-07 08:57来源:BloodyAngel 作者:博客园 点击:
WPF树型表格列宽问题 由一个Bug引出的自动扩张,其实客户那边已经对这个问题提了多次,不过由于对WPF只是入门级,所以一直都没改.

  问题描述

  今天测试人员提了一个易用性的BUG,主要是说系统目前使用的树型控件不支持自动扩张列的宽度。其实客户那边已经对这个问题提了多次,不过由于对WPF只是入门级,所以一直都没改。这两天项目比较闲,就花了些时间把这个问题改了。原问题如下:

  

image

  图1 问题描述

  背景

  树型控件在GIX4系统中已经被大量使用。这个控件是一年前其它同事在网上搜索到,再引入的。

  一开始的时候,要解决这个问题,想到的最直接的方案是这样的:找到第一列中的Expander控件(加号:

image

),然后监听它的“Expanded”事件;在事件处理程序中,计算所需要的宽度,然后设置为控件的宽度。

  按照这个方案去实际写代码时,发现并没有想象中那么简单,发现了很多问题。例如,Expander并不是Expander控件,而是一个ToggleButton,而且是写在模板中的,TreeGridRowPresenter中的Expander的类型也只是UIElement,也就是说,不能把Expander从UIElement转换为ToggleButton,这样程序会写得很死。又如,如何计算第一列的所需要宽度。

  虽然我们项目中是有整个控件的源码,但是整合进来后别的同事已经对它进行了很多修改,所以只有在网上找到最原始的源码来研究。发现,原来这个树型控件的方案是Avalon Team自己给出的:《TreeListView: Show Hierarchy Data with Details in Columns》。然后Ricciolo对它进行了一些研究:《Fun With GridView*RowPresenter》,最后他给出了一个较完整的版本:《A complete WPF TreeListView control》。

  学习并研究了它的源码,最后总结出以下几个子问题,这些问题是要上面提及的BUG所需要解决的:

  四个待解决的问题

  1. 何时触发是最合适的?在何处触发调整宽度的代码?

  2. 如何找到树型控件的所有GridViewRowPresenter。

  3. GridViewRowPresenter中,如何把第一列的控件找到。

  4. 第一列控件的组成结构是怎么样的,它所需要的大小如何求出,是否可以直接使用Measure和DesiredSize。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
推荐内容