繁体   English   中英

设置何时在WPF ScrollViewer中滚动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM