当设置在WPF的ScrollViewer滚动(Setting when to scroll in W

2019-09-22 05:04发布

我有一个包含在它一堆表单控件(文本框,复选框,组合框等)的格子的ScrollViewer中。 当我通过控制选项卡中,ScrollViewer中会滚动,但只在必要时。 我的意思是我通过TAB键在ScrollViewer中的所有内容,并只有当控制是不可见的做的ScrollViewer滚动。 我想做到的是具有ScrollViewer中向下滚动时,控制在可见光区域的底部25%,随后当控制在可见光区域的顶部25%的向上滚动(反向Tab键)。 这能实现呢?

Answer 1:

我发现这个问题的最好的解决办法是办理表单控件GotFocus事件。 由于我产生一个公共区域的控制,很容易这个分配给创建的所有控件。 在本事件处理程序中,我找到元件的其含有网格内的位置。 然后我做了滚动查看器ScrollToVerticalOffset,计算ScrollViewer中的呈现高度的一半的减法。 这使得在ScrollViewer中如果可能的话中间的主动控制。

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);
}


Answer 2:

我想你应该写一个实现IScrollInfo接口的自定义控制,并通过接口提供定制值的计算。

看看这个: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.iscrollinfo.aspx



文章来源: Setting when to scroll in WPF ScrollViewer