[英]Setting when to scroll in WPF ScrollViewer
我有一个scrollviewer,其中包含一个网格,其中包含一堆表单控件(文本框,复选框,组合框等)。 当我浏览控件时,滚动查看器将滚动,但仅在必要时滚动。 我的意思是我选中滚动查看器中的所有内容,并且只有当控件不可见时,滚动查看器才会滚动。 我想要实现的是当控件位于可见区域的底部25%时滚动查看器向下滚动,然后当控件位于可见区域的前25%(反向标签)时向上滚动。 这可以实现吗?
我发现这个问题的最佳解决方案是处理表单控件的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);
}
我认为你应该编写一个实现IScrollInfo接口的自定义控件,并自定义接口提供的值的计算。
看看这个: http : //msdn.microsoft.com/en-us/library/system.windows.controls.primitives.iscrollinfo.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.