Панели внутри ScrollViewer

#wpf #layout #mvvm

#wpf #макет #mvvm

Вопрос:

У меня возникла интересная проблема в моем приложении wpf.

Я работаю с mvvm, и элементы состоят из элемента управления содержимым, который привязан к модели представления.

Например:

 <Shell> 
   <ScrollViewer>
    <StackPanel>
        <ContentControl Content="{Bidning SomeVM}"/>
        <ContentControl Content="{Bidning SomeVM2}"/>
        <ContentControl Content="{Bidning SomeVM3}"/>
    </StackPanel>
   </ScrollViewer>

</Shell>
  

Если на панели стека есть только один элемент, он работает нормально, но по какой-то причине для каждого представления (разрешенной формы виртуальной машины) требуется гораздо больше места (высоты), чем на самом деле нужно.

Представления содержат групповое поле и сетку данных внутри, если это имеет значение.

Итак, это моя проблема, есть предложения?

Комментарии:

1. Вы пытались удалить stackpanel?

2. sll: и что потом? Я не могу поместить более одного дочернего элемента..

Ответ №1:

StackPanel будет измерять свои дочерние элементы с бесконечностью в направлении ориентации, которая по умолчанию является вертикальной. Таким образом, ваши элементы будут измеряться с бесконечной высотой, что, по сути, означает, что они будут соответствовать размеру содержимого — например, DataGrid выделит, измерит и упорядочит запись для каждого элемента в списке (при условии, что для элемента управления не было установлено никаких ограничений). Также обратите внимание, что в результате их виртуализации не будет, поскольку это зависит от измерения с определенным ограничением.

Обратите внимание, даже если вы использовали другую панель, вы можете получить такое поведение, поскольку ScrollContentPresenter в ScrollViewer будет измерять свои дочерние элементы с бесконечностью, если он выполняет прокрутку — что произойдет, если для CanContentScroll установлено значение false или если ItemsPanel не реализует IScrollInfo.

Я не уверен, какой тип макета вы хотите получить, поэтому трудно предложить какие-либо конкретные рекомендации.

Комментарии:

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

2. Как вы видите, что это работает, когда DataGrid и т. Д. вероятно, будут полосы прокрутки? Итак, чтобы было ясно, вы хотите, чтобы каждый из трех элементов управления имел 3-ю высоту окна. Итак, когда вы увеличиваете масштаб, вы хотите, чтобы эти элементы управления по-прежнему измерялись / располагались так, как если бы они составляли 3-ю часть высоты, Но использовали rendertransform и т. Д. Для увеличения содержимого каждого из них?