在WPF中,我有一个包含7个不同组框的scrollviewer。 每个groupbox都是不同表单的独立部分。 因为滚动查看器太长了,所以我在面板左侧的堆栈面板中放置了一系列按钮,并完成了代码隐藏,因此单击按钮会触发相应组框的BringIntoView方法。

我的问题是,有没有办法强制BringIntoView每次都将组框定位在可见部分的顶部。 默认情况下,BringIntoView仅移动滚动查看器,直到整个组框都在视图中,而不是显示最顶层的项目。 有没有解决的办法?

我研究了使用ScrollToVerticalOffset,但无法弄清楚如何获得正确的位置,主要是因为它说groupbox没有Locate属性,我将用它来获取位置,然后用ScrollToVerticalOffset设置它。 我在打字时想到的一件事就是让每个按钮 - 首先将jusmp压到顶部的groupbox,然后立即继续正确的一个,但这看起来很糟糕,我更喜欢找到正确的方法。 :)

===============>>#1 票数: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);
}

代码在Scrollviewer中获取GroupBox的位置并滚动到它。

  ask by Keven M translate from so

未解决问题?本站智能推荐: