我有一个带有自定义代码的 Silverlight 数据网格,它允许在左侧使用 +/- 按钮,并且可以显示具有树结构的表格。+/- 按钮绑定到我的 ViewModelRows 上的 IsExpanded 属性,正如我所说的那样。行的可见性绑定到 ViewModelRows 上的 IsVisible 属性,该属性根据是否展开所有父行来确定。够直截了当。
这段代码运行良好,因为如果我使用 PageUp/PageDown 或箭头键上下滚动网格,所有正确的行都被隐藏并且所有内容都具有正确的结构,我可以使用 +/- 按钮来玩我的心内容。但是,右侧的垂直滚动条虽然从正确的大小开始并且平滑地滚动行,但当我折叠行然后重新展开它们时,它不会回到正确的大小。
滚动条通常仍然可以移动来滚动整个集合,但是因为它太大了,一旦滚动条移动到底部,还有更多的行要经过,它有点生硬地一直向下射到底部或有时根本无法滚动。这很难描述,所以我包含了一个带有黑线的屏幕截图,以显示滚动条长度的差异,即使两个网格扩展的行数相同。
我认为这可能是与 Datagrid 对行进行虚拟化的方式有关的错误。在我看来,当扩展状态发生变化时,它没有正确跟踪每行应该有多高。有没有办法以编程方式“戳”(read hack)它以重新计算它在 LoadingRow 上的滚动条大小或类似的丑陋东西?我会包含一个代码示例,但有 2 个 c# 文件和 1 个 xaml 文件,所以我想看看其他人是否听说过此类问题,然后再尝试使其以独立的方式重现。再一次,使用箭头键滚动工作正常,所以我很确定底层逻辑和绑定正在工作,只是行高计算不正确存在一些问题。
由于我是新用户,它不会让我使用图像标签所以在这里'
http://img210.imageshack.us/img210/8760/messedupscrollbars.png