我有一个包含一堆表单控件(文本框、复选框、下拉框等)的网格滚动视图。当我通过控件进行Tab键切换时,滚动视图会滚动,但仅在必要时才会这样做。我的意思是,我通过滚动视图中的所有内容,并且只有当控件不可见时,滚动视图才会滚动。我想要实现的是,当控件在可见区域的底部25%时,让滚动视图向下滚动,当控件在可见区域的顶部25%时向上滚动(反向Tab切换)。这个能做到吗?
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);
}
我认为你应该编写一个实现IScrollInfo接口的自定义控件,并自定义接口提供的值的计算。
看一下这个:http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.iscrollinfo.aspx