WPF - 滚动查看器中的内容?

Nic*_* W. 15 c# wpf scrollviewer

我有一个包含文本块项目堆栈面板的scrollviewer(实际上,这些可能是tabitems,我在scrollviewer中使用stackpanel来覆盖tabcontrol模板中的默认tabpanel).我希望能够做的是,当更改选定的选项卡时,将新选择的选项卡移动到滚动查看器可见区域的中心.理想情况下,这适用于所有选项卡,甚至是远端的选项卡,但我愿意能够告诉滚动查看器滚动使得特定元素尽可能接近居中.

在WPF中有没有明显的方法来实现这一目标?我现在能想到的所有解决方案都涉及很多关于自定义控件的工作.

在此输入图像描述

小智 14

您可以使用以下代码轻松地将内容设置为中心;

scrollviewer.ScrollToVerticalOffset(scrollviewer.ScrollableHeight / 2);
scrollviewer.ScrollToHorizontalOffset(scrollviewer.ScrollableWidth / 2);
Run Code Online (Sandbox Code Playgroud)


Rob*_*evy 7

ScrollViewer.ScrollToHorizontalOffset()是你在找什么.只需要计算所选元素相对于stackpanel的偏移量.你可以用类似的东西来获得selectedElement.TranslatePoint( new Point(), stackPanel)

为了使这个功能适用于远端的元素,您需要在滚动查看器的开头和结尾添加一些"空白"元素以占用适当的空间.

为了使它看起来漂亮,请在计时器中调用ScrollToHorizo​​ntalOffset以使滚动"动画"而不是跳转