WPF Scrollviewer滚动到子元素不工作

WPF Scrollviewer滚动到子元素不工作,wpf,scroll,scrollviewer,children,Wpf,Scroll,Scrollviewer,Children,这就是我要做的。我有一个Scrollviewer,里面嵌套着UserControls,嵌套在其他UserControls、网格、StackPanel和其他容器中。当我点击一个按钮,在这个层次结构中的某个地方添加另一个孩子时,我想滚动查看这个孩子。功能代码如下: public static void ScrollParentNamedScrollViewerDown(DependencyObject child, string strTargetParent, DependencyObject

这就是我要做的。我有一个Scrollviewer,里面嵌套着UserControls,嵌套在其他UserControls、网格、StackPanel和其他容器中。当我点击一个按钮,在这个层次结构中的某个地方添加另一个孩子时,我想滚动查看这个孩子。功能代码如下:

 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是嵌套UserControl底部以前为空的隐藏扩展器

由于某些原因,当我执行TranslatePoint函数时,我得到的垂直偏移值低得离谱——我的scrollviewer scrollheight接近800,我添加了一个子控件,它将显示在2个大的子控件下面的最底部,我得到的值在160ish范围内


有人知道这里发生了什么吗?

如果答案是这样的话


在控件上显示视图
由于UserControl源于FrameworkElement,因此它应该可以工作。
我只将其用于ListItem


如果答案是这样的话


在控件上显示视图
由于UserControl源于FrameworkElement,因此它应该可以工作。
我只将其用于ListItem


控件上的BringIntoView不知道此功能。控件上的ThanksBingtoView未意识到此功能。感谢被标记为答案,因为显然我又在试图重新发明轮子。也就是说,如果有人在看它,并且能告诉我为什么我会从TranslatePoint得到不正确的值,我仍然很好奇。标记为答案,因为显然我再次尝试重新发明轮子。也就是说,如果有人在看它,并且能告诉我为什么我会从TranslatePoint得到不正确的值,我仍然很好奇。
gbSubWindow.Visibility = System.Windows.Visibility.Visible;
gbSubWindow.Content = uc;
ScrollParentNamedScrollViewerDown(gbSubWindow, "OmsWindowScrollViewer");