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

use*_*290 1 wpf scroll children scrollviewer

这就是我想要做的。我有一个 Scrollviewer,里面嵌套了 UserControls,嵌套在其他 UserControls、网格、堆栈面板和其他容器中。当我单击在此层次结构中的某处添加另一个子项的按钮时,我想滚动以查看该子项。函数代码如下:

 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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

这个函数是这样使用的:

gbSubWindow.Visibility = System.Windows.Visibility.Visible;
gbSubWindow.Content = uc;
ScrollParentNamedScrollViewerDown(gbSubWindow, "OmsWindowScrollViewer");
Run Code Online (Sandbox Code Playgroud)

其中 gbSubWindow 是嵌套 UserControl 底部以前为空的隐藏扩展器

出于某种原因,当我执行 TranslatePoint 函数时,垂直偏移的值低得离谱 - 我的 scrollviewer scrollheight 接近 800,并且我添加了一个将显示在 2 个大子控件下方的最底部的子控件,我得到了160 左右范围内的值。

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

pap*_*zzo 6

如果这是答案

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

FrameworkElement.BringIntoView 方法