WPF Scrollviewer滚动到子元素不起作用

时间:2014-03-18 17:28:16

标签: wpf scroll scrollviewer children

这是我想要做的。我有一个Scrollviewer并嵌套在其中的是UserControls,嵌套在其他UserControls,内部网格,stackpanels和其他容器中。当我单击一个按钮,在此层次结构中的某个地方添加另一个孩子时,我想滚动查看所述孩子。下面的功能代码:

 public static void ScrollParentNamedScrollViewerDown(DependencyObject child, string strTargetParent, DependencyObject newStartPoint = null)            
    {
        if(child == null) return;
        if(newStartPoint == null) newStartPoint = child;
        ScrollViewer scvPotentialTarget = GetParentOfType<ScrollViewer>(newStartPoint);
        if (scvPotentialTarget == null) return;
        if (scvPotentialTarget.Name != strTargetParent)
        {
            ScrollParentNamedScrollViewerDown(child, strTargetParent, scvPotentialTarget);
        }
        else
        {
            UIElement scrollTarget = child as UIElement;
            if (scrollTarget == null)
                scvPotentialTarget.ScrollToBottom();
            else{
                Point pTarget = scrollTarget.TranslatePoint(new Point(0, 0), scvPotentialTarget);                    
                if (pTarget == null)
                    scvPotentialTarget.ScrollToBottom();
                else
                    scvPotentialTarget.ScrollToVerticalOffset(pTarget.Y);
            }
        }

此功能的用法如下:

gbSubWindow.Visibility = System.Windows.Visibility.Visible;
gbSubWindow.Content = uc;
ScrollParentNamedScrollViewerDown(gbSubWindow, "OmsWindowScrollViewer");

其中gbSubWindow是一个先前为空的隐藏扩展器,位于嵌套UserControl的底部

出于某种原因,当我执行TranslatePoint函数时,我的垂直偏移值变得非常低 - 我的scrollviewer scrollheight接近800,我正在添加一个子项,它将显示在2个大型子控件下面的最底部我的价值在160以上。

任何人都有任何想法,这里发生了什么?

1 个答案:

答案 0 :(得分:4)

如果是答案

控件上的BringIntoView
由于UserControl派生自FrameWorkElelement,它应该工作 我只将它用于ListItem

FrameworkElement.BringIntoView Method