WPF如果滚动查看器的子项调整大小,滚动查看器会自动更新其范围吗?

时间:2013-08-23 02:14:55

标签: c# wpf xaml scrollviewer

所以我的第一个问题是scrollviewer是否自动更新其范围,或者我是否需要在scrollviewer上调用invalidate measure来强制它更新。

无论如何,我有一个里面有图表的滚动查看器。当我使用缩放选择框时,我想要更改轴分割单元,滚动查看器的内容要更改,滚动查看器重新计算其新范围,最后滚动到正确的偏移。

目前我将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);

但是,滚动查看器范围在我希望滚动时没有更新,因此代码无法正常运行。我想我也可以在这里调用scrollviewer上的invalidatemeasure,但是我如何确保AxisDivision已经改变?我需要确保内容的大小取决于属性。

1 个答案:

答案 0 :(得分:1)

您好我遇到了同样的问题,我在检查scrollviewer.extent属性之前通过调用scrollviewer控件的updateLayout方法修复了它。

我希望它有所帮助。