我有一个包含文本块项目的 StackPanel 滚动视图(实际上,这些可能是选项卡项,我在滚动视图中使用堆栈面板来覆盖选项卡控件模板中的默认选项卡面板)。我希望能够在选择的选项卡更改时将新选择的选项卡移动到滚动视图可见区域的中心位置。理想情况下,这将适用于所有选项卡,即使是在远侧的选项卡也是如此,但我愿意让滚动视图滚动以使特定元素尽可能靠近中心。
有没有明显的方法在WPF中实现这一点?我目前能想到的所有解决方案都需要大量的自定义控件操作。
![enter image description here](https://istack.dev59.com/l1Of8.webp)
![enter image description here](https://istack.dev59.com/l1Of8.webp)
您可以使用以下代码轻松将内容设置为中心;
scrollviewer.ScrollToVerticalOffset(scrollviewer.ScrollableHeight / 2);
scrollviewer.ScrollToHorizontalOffset(scrollviewer.ScrollableWidth / 2);
ScrollViewer.ScrollToHorizontalOffset()
是您要寻找的内容。只需要计算所选元素相对于堆栈面板的偏移量即可。您可以使用类似于 selectedElement.TranslatePoint( new Point(), stackPanel)
的方法来获取它。
为了使这对两端的元素都起作用,您需要在滚动查看器的开头和结尾添加一些“空白”元素,以占据适当的空间。
为了使其看起来漂亮,请在定时器中调用 ScrollToHorizontalOffset 以使滚动“动画化”,而不是跳跃。
//for ScrollViewer s;
s.ScrollToHorizontalOffset((s.ExtentWidth - s.ViewportWidth) / 2);
s.ScrollToVerticalOffset((s.ExtentHeight - s.ViewportHeight) / 2);