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.
Я надеюсь, что это помогает.