RowDetailsTemplate不会自动调整大小 - Silverlight DataGrid

时间:2010-03-10 06:12:08

标签: silverlight

请查看随附的屏幕截图。

我正在为模板中的每一行的rowdetails区域添加一个datagrid。

我现在遇到的问题是,当rowdetails区域变大时,即当添加更多内容时,它会正确调整大小。

但是一旦你折叠了那些行(及其相应的rowdetails)并打开了另一个小于第一行的rowdetail,rowdetails容器就不会调整大小(即更小)以适应较小的内容。

请参阅以下flickr集,因为我不允许发布图片或多个超链接:http://www.flickr.com/photos/47755109@N08/sets/72157623590404492/

如何解决此问题?

此致 雷尼尔

2 个答案:

答案 0 :(得分:1)

我在网上搜索了这个问题,发现只有非常复杂的解决方法(比如这里)。

但实际上很难解决这个问题:

<sdk:DataGrid.RowDetailsTemplate>
    <DataTemplate>
         <ContentControl **VerticalAlignment="Top"**
...

- &GT;如果datatemplate中的控件的顶点对齐为&#34; Top&#34; (相对于默认值&#34; Stretch&#34;)行按预期收缩。

此致 约翰内斯

答案 1 :(得分:0)

我知道这个问题非常陈旧,但我在遇到此问题之后偶然发现了它。它与http://forums.silverlight.net/p/96989/279885.aspx

等其他问题有关

基本上,根是DataGrid控件希望避免其行的大小抖动。由于在关闭元素时虚拟化(让我们假设水平滚动),元素不再呈现。因此,当Silverlight尝试确定行的高度时,如果行的最大部分偏离一侧(并因此虚拟化),那么在不渲染所有屏幕外内容的情况下,它无法真正知道该行应该有多高。因此,在这种情况下,他们做出了妥协,他们使用屏幕上元素的高度或行的当前高度,如果当前高度大于当前屏幕上的所有元素。这会导致您描述的行为。

有一些解决方法,上面的链接中描述的一种解决方法是关闭DataGrid上的虚拟化,但如果DataGrid中存在非常重要的数据量,则会对性能产生影响。我使用的另一个是将DataGrid行高设置为0,强制重新渲染,然后将行高设置回默认值或自动。通过这种方式,我可以强制行缩小。

希望能帮助遇到此问题的人。