在WPF中,我有一个包含7个不同组框的滚动查看器。每个groupbox都是不同表单的独立部分。由于滚动查看器太长,我在面板左侧的堆栈面板中放置了一系列按钮,并完成了代码隐藏,因此单击按钮会触发相应组框的BringIntoView方法。
我的问题是,有没有办法强制BringIntoView每次都将组框定位在可见部分的顶部。默认情况下,BringIntoView仅移动滚动查看器,直到整个组框都在视图中,而不是显示最顶层的项目。有办法解决这个问题吗?
我研究过使用ScrollToVerticalOffset,但无法弄清楚如何获得正确的位置,主要是因为它说groupbox没有Locate属性,我将用它来获取位置,然后用ScrollToVerticalOffset设置它。我在打字时想到的一件事就是让每个按钮 - 首先将jusmp压到顶部的groupbox,然后立即继续正确的一个,但这看起来很糟糕,我更喜欢找到正确的方法。 :)
答案 0 :(得分:10)
试试这个:
private void ScrollToGroupBox(GroupBox groupBox)
{
GeneralTransform groupBoxTransform = groupBox.TransformToAncestor(scrollViewer);
Rect rectangle = groupBoxTransform.TransformBounds(new Rect(new Point(0, 0), groupBox.RenderSize));
scrollViewer.ScrollToVerticalOffset(rectangle.Top + scrollViewer.VerticalOffset);
}
代码获取您的GroupBox在Scrollviewer中的位置并滚动到它。