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

Итак, мой первый вопрос: будет ли прокрутка автоматически обновлять свой экстент или мне нужно вызвать недействительную меру в 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);

Тем не менее, экстент scrollviewer не обновляется к тому времени, когда я хочу прокрутить, поэтому код не работает так, как я хочу. Я предполагаю, что я мог бы также потенциально вызвать invalidate measure в средстве просмотра прокрутки, но тогда как я могу гарантировать, что AxisDivision изменился? Я должен убедиться, что, поскольку размер содержимого зависит от свойства.

1 ответ

Решение

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

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

Другие вопросы по тегам