我有一些自定义计算,根据ScrollViewer的视口尺寸来更改控件的尺寸。目前,我在获取ScrollViewer.SizeChanged事件时进行这些计算。但是,似乎SizeChanged事件在ScrollViewer更新ViewPort尺寸之前执行。我的SizeChanged事件处理程序显示一个带有更新为新尺寸的Width和Height的ScrollViewer发送器,但ViewportWidth和ViewportHeight属性仍是旧的尺寸。
是否有一种方法可以在这些值更改后执行代码?
我有一些自定义计算,根据ScrollViewer的视口尺寸来更改控件的尺寸。目前,我在获取ScrollViewer.SizeChanged事件时进行这些计算。但是,似乎SizeChanged事件在ScrollViewer更新ViewPort尺寸之前执行。我的SizeChanged事件处理程序显示一个带有更新为新尺寸的Width和Height的ScrollViewer发送器,但ViewportWidth和ViewportHeight属性仍是旧的尺寸。
是否有一种方法可以在这些值更改后执行代码?
OnScrollChanged 当检测到滚动状态的更改时调用,例如滚动位置、范围或视口大小的更改。
我曾经遇到同样的问题,需要在ScrollViewer调整大小时知道Viewport的新尺寸。
由于SizeChanged在调整Viewport之前触发,因此要获取新的Viewport大小,只需通过SizeChangedEventArgs传递的旧大小和新大小之间的差异,并将其应用于当前的Viewport大小即可,方法如下:
private void ScrollViewer_SizeChanged(object sender, SizeChangedEventArgs e)
{
var sv = sender as ScrollViewer;
var newViewportHeight = sv.ViewportHeight - e.PreviousSize.Height + e.NewSize.Height;
var newViewportWidth = sv.ViewportWidth - e.PreviousSize.Width + e.NewSize.Width;
}