【发布时间】:2010-02-09 16:48:45
【问题描述】:
我在 Silverlight 3 中有一个树视图。
树视图绑定到一个可观察的集合——其中包含一个分层数据列表。
初始加载页面时,默认情况下,树视图中的所有节点都会折叠。
我的功能允许以编程方式选择树视图中的某个项目。
我正在运行的问题是选择一个不立即可见的项目(即一个或多个父节点折叠)。我以编程方式展开它们,但是,当我尝试以编程方式滚动到视图中以便用户可以看到所选项目时,它不起作用。
我对此进行了进一步研究,我认为这与计算的滚动查看器视口高度有关。这似乎是一个时间问题,因为如果展开项目的父节点,然后以编程方式选择项目,则将树视图滚动到所选树视图项目的视图中的代码完美运行。
请参考下面我用来将树视图滚动到视图中的扩展方法。任何有关如何纠正此问题的帮助或建议将不胜感激。
谢谢。
public static void BringIntoViewForScrollViewer(this FrameworkElement frameworkElement, ScrollViewer scrollViewer)
{
var transform = frameworkElement.TransformToVisual(scrollViewer);
var positionInScrollViewer = transform.Transform(new Point(0, 0));
if (positionInScrollViewer.Y < 0 || positionInScrollViewer.Y > scrollViewer.ViewportHeight)
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + positionInScrollViewer.Y - ScrollPadding);
}
【问题讨论】:
-
您是否尝试在扩展节点和调用扩展方法之间调用 TreeView 或 ScrollViewer 上的 UpdateLayout() 以确保 VerticalOffset 和 ViewportHeight 属性是最新的?
-
就是这样 - 必须在 TreeView 和 ScrollViewer 上调用 UpdateLayout。谢谢!
-
可能想将其添加为官方答案 + 将其标记为已回答,这样它就不会出现在未回答的搜索中。
标签: silverlight