我在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);
}
答案 0 :(得分:1)
在UpdateLayout
或TreeView
之间致电ScrollViewer
,扩展节点并调用您的扩展程序,以确保VerticalOffset
和ViewportHeight
属性达到日期。
(通过Dan Auclair的评论复制了导致问题解决的答案)