WPF ScrollViewer中设置何时滚动

3
我有一个包含一堆表单控件(文本框、复选框、下拉框等)的网格滚动视图。当我通过控件进行Tab键切换时,滚动视图会滚动,但仅在必要时才会这样做。我的意思是,我通过滚动视图中的所有内容,并且只有当控件不可见时,滚动视图才会滚动。我想要实现的是,当控件在可见区域的底部25%时,让滚动视图向下滚动,当控件在可见区域的顶部25%时向上滚动(反向Tab切换)。这个能做到吗?
2个回答

1
我发现解决这个问题的最佳方案是处理表单控件的GotFocus事件。由于我在一个公共区域生成控件,因此很容易将其分配给创建的所有控件。在此事件处理程序中,我定位元素在其包含网格中的位置。然后,在滚动查看器上执行ScrollToVerticalOffset操作,计算滚动查看器呈现高度的一半的减法。如果可能,这将使活动控件保持在滚动查看器的中间。
void FormElement_GotFocus(object sender, RoutedEventArgs e)
{
    FormElement element = sender as FormElement;
    Point elementLocation = element.TranslatePoint(new Point(), canvasGrid);
    double finalHeight = elementLocation.Y - (canvasScrollViewer.RenderSize.Height/2);
    canvasScrollViewer.ScrollToVerticalOffset(finalHeight);
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接