【问题标题】:SL3 TreeView Not Programmatically ScrollingSL3 TreeView 不以编程方式滚动
【发布时间】: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


【解决方案1】:

在扩展节点和调用扩展方法之间调用TreeViewScrollViewer 上的UpdateLayout,以确保VerticalOffsetViewportHeight 属性是最新的。

(从Dan Auclair 的评论中复制的答案导致问题得到解决)

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2011-01-16
    • 2011-01-15
    相关资源
    最近更新 更多