WPF, если дочерние элементы средства просмотра прокрутки изменят размер, будет ли средство просмотра прокрутки автоматически обновлять свой экстент?

Итак, мой первый вопрос: обновляет ли scrollviewer автоматически свой экстент или мне нужно вызвать недействительную меру в scrollviewer, чтобы заставить его обновиться.

Во всяком случае, у меня есть средство просмотра прокрутки с графиком внутри. Когда я использую поле выбора масштаба, я хочу, чтобы изменилась единица деления оси, изменилось содержимое средства просмотра прокрутки, средство просмотра прокрутки пересчитало свой новый экстент и, наконец, прокручивало до правильного смещения.

В настоящее время у меня есть 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 изменился? Мне нужно убедиться в этом, поскольку размер содержимого зависит от свойства.


person James Joshua Street    schedule 23.08.2013    source источник
comment
Макетирование всегда становится сложным при манипулировании элементами пользовательского интерфейса в коде позади, но вы можете присоединить событие PropertyChanged к метаданным AxisDivision DependancyProperties   -  person sa_ddam213    schedule 23.08.2013


Ответы (1)


Привет, у меня была такая же проблема, и я исправил ее, вызвав метод updateLayout элемента управления scrollviewer перед проверкой свойства scrollviewer.extent.

Я надеюсь, что это помогает.

person user983663    schedule 24.04.2014