2012-09-06 43 views
3

我有一个scrollviewer,其中包含一个表格控件(文本框,复选框,组合框等)一堆网格。当我通过控件选项卡时,滚动查看器将滚动,但仅在必要时才滚动。通过这个我的意思是我选中了scrollviewer中的所有内容,并且只有当控件不可见时,scrollviewer才会滚动。我想要完成的是当控件位于可见区域的底部25%时,向下滚动scrollviewer,然后当控件位于可见区域的顶部25%(反向标签)时向上滚动。这可以完成吗?设置何时滚动WPF ScrollViewer

回答

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); 
} 
相关问题