这是我想要做的。我有一个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以上。
任何人都有任何想法,这里发生了什么?
答案 0 :(得分:4)
如果是答案
控件上的BringIntoView
由于UserControl派生自FrameWorkElelement,它应该工作
我只将它用于ListItem