#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 и т. Д. Для увеличения содержимого каждого из них?