【发布时间】:2010-12-17 15:39:40
【问题描述】:
我有一个包含数据网格的 Silverlight 用户控件。数据网格绑定到 ObservableCollection。用户控件显示在一个弹出窗口中,我显示该窗口是为了响应另一个控件中的某些事件
集合中大约有80个对象,我在datagrid上设置了400的固定高度,所以一次只能显示大约20个项目,并且应该显示垂直滚动条,拇指大小占控制高度的1/4左右。
然而,实际上发生的是滚动条几乎占据了整个控件高度;可能是其中的 95%。数据网格显示前 20 个项目。当我点击滚动条向下箭头时,滚动条会向下移动一点,占据滚动区域的底部 95%,并且数据网格显示最后 20 个项目。
它变得更奇怪了。如果我在网格中的项目上移动并使用鼠标滚轮向下滚动,则项目会正确滚动并且我可以查看整个列表,尽管滚动条的大小保持不变。
然后,如果我关闭弹出窗口并重新打开它,滚动条现在会以正确的高度显示,并且可以正常工作。
最后,如果我只是直接在页面上显示控件,而不是在弹出窗口中不,它就可以正常工作。 这里发生了什么?!有没有其他人遇到过这个问题?救命!
更新:问题似乎是我显示弹出窗口的方式。由于各种原因,我不得不以一种有点棘手的方式来实现弹出显示,这就是造成问题的原因。
【问题讨论】:
-
您能隔离问题并发布 xaml 和代码吗? (没有 80 行数据对象)
-
并不容易,但正如我所尝试的那样,我离问题的根源更近了(请参阅更新),所以 danke schoën 提出建议。
-
我看到了同样的问题,但不是在弹出窗口或 ChildWindow 中。当用户选择要加载的项目时,DataGrid 可能会加载数千行,并且用户无法轻松滚动浏览它们。约书亚:你做了什么来解决这个问题?它可能与 DataGrid 的容器有关,但不一定特定于 Popup。
-
@Zack:我从来没有真正找到问题的根源,而且我没有虚拟化网格,因为我只需要显示十几行。我在弹出窗口中显示网格,我必须显式重置 DataContext,因为我正在将弹出窗口从一个页面移动到另一个页面。很长的故事。无论如何,我在以正统方式在页面上使用网格时从未遇到过这个问题,所以我不确定我能帮助你多少。
标签: silverlight datagrid popup