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 左右范围内的值。
任何人都有任何想法,这里发生了什么?
如果这是答案
控件上的BringIntoView
由于UserControl 派生自FrameWorkElelement,所以它应该可以工作。
我只将它用于 ListItem
FrameworkElement.BringIntoView 方法
| 归档时间: |
|
| 查看次数: |
3747 次 |
| 最近记录: |