SL3 TreeView无法以编程方式滚动

时间:2010-02-09 16:48:46

标签: silverlight

我在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);
    }

1 个答案:

答案 0 :(得分:1)

UpdateLayoutTreeView之间致电ScrollViewer,扩展节点并调用您的扩展程序,以确保VerticalOffsetViewportHeight属性达到日期。

(通过Dan Auclair的评论复制了导致问题解决的答案)