所以我的第一个问题是滚动查看器是否自动更新其范围,或者我是否需要在滚动查看器上调用无效措施以强制其更新。
不管怎样,我有一个滚动查看器,里面有一个图表。当我使用缩放选择框时,我希望更改轴划分单位,更改滚动查看器的内容,滚动查看器重新计算其新范围,最后滚动到正确的偏移量。
目前,我将 AxisDivisionUnit 作为依赖属性,更新时会使内容无效,然后重新测量内容并重新绘制。
sg.InvalidateMeasure();
sg.UpdateLayout();
sg.DrawSignal();
而在另一堂课上,
AxisDivisionUnit = NewAxisDivisionUnit;
//need to scroll to new position based on location chosen with zoombox
//calculate position of originalOffsetinTimescaleunits on new scale.
double NewNumberOfPixelsPerUnit = (double)(NUMBER_OF_DEVICE_INDEP_PIXELS_PER_INCH) / AxisDivisionUnit;
double NewPixelOffset = HorizontalUnitOffset * NewNumberOfPixelsPerUnit;
if (NewPixelOffset > sv.ExtentWidth)
{
NewPixelOffset = sv.ExtentWidth - sv.ViewportWidth;
}
sv.ScrollToHorizontalOffset(NewPixelOffset);
但是,当我希望滚动时,滚动查看器范围尚未更新,因此代码无法按我的意愿运行。我想我也可以在此处的滚动查看器上调用 invalidatemeasure,但是如何确保 AxisDivision 已更改?我需要确保,因为内容的大小取决于属性。
您好,我遇到了同样的问题,我通过在检查scrollviewer.extent属性之前调用scrollviewer控件的updateLayout方法来修复它。
我希望它有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)