【问题标题】:WPF if the children of a scrollviewer resize, will the scrollviewer automatically update its extent?WPF 如果滚动查看器的子级调整大小,滚动查看器会自动更新其范围吗?
【发布时间】:2014-04-24 23:38:30
【问题描述】:

所以我的第一个问题是滚动查看器是否自动更新其范围,或者我是否需要在滚动查看器上调用无效措施以强制其更新。

无论如何,我有一个滚动查看器,里面有一个图表。当我使用缩放选择框时,我希望轴分割单位发生变化,滚动查看器的内容发生变化,滚动查看器重新计算其新范围,最后滚动到正确的偏移量。

目前我将 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 发生了变化?我需要确保,因为内容的大小取决于属性。

【问题讨论】:

  • 在后台代码中操作 UI 元素时,布局计算总是很棘手,但您可以将 PropertyChanged 事件附加到 AxisDivision DependancyProperties 元数据

标签: c# wpf xaml scrollviewer


【解决方案1】:

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

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多