Растяжка выравнивания WPF
-
11-09-2019 - |
Вопрос
Может ли кто-нибудь помочь мне понять выравнивание растяжения WPF.Я часто сталкиваюсь с проблемами, когда мне нужно, чтобы элемент управления заполнил область, но я никогда не понимаю, на каком уровне мне следует поместить UpperAlignment="Stretch".Особенно, когда задействованы UserControls.
Я всегда решаю проблему, пробуя разные вещи или растягивая все уровни, но мне хотелось бы понять, как это делать правильно.
Давайте возьмем пример, который я получил сейчас:
- У меня есть сетка с ячейкой фиксированного размера (размер которой можно изменить с помощью GridSplitter).
- В этой ячейке у меня есть UserControl, содержащий StackPanel с TabControl.
- В TabControl у меня есть TabItems, содержащий другой UserControl с ListView.
Или в каком-то псевдо-XAML.
<ns:MyUserControl1 Grid.Row="0" Grid.Column="0">
<!-- this is in MyUserControl1 -->
<StackPanel>
<TabControl>
<TabItem>
<ns:MyUserControl2>
<!-- This is in MyUserControl2 -->
<ListView/>
</ns:MyUserControl2>
</TabItem>
</TabControl>
</StackPanel>
</ns:MyUserControl>
Теперь я хочу, чтобы ListView заполнил всю ячейку сетки (конечно, за исключением TabControl и полей).
Решение
Ваш ListView заполнит ваш MyUserControl2 - если вы хотите, чтобы он поместился на всей вкладке, вам необходимо убедиться, что вы удалили ограничения высоты и ширины в файле xaml UserControl (по умолчанию они равны 300 каждому).
РЕДАКТИРОВАТЬ:Извините, я пропустил важную часть вашего xaml...Контейнер MyUserControl1 представляет собой StackPanel...это объединит дочерние элементы управления и изменит их размер в соответствии с ними;Если вы замените его DockPanel (или Grid), дочерние элементы управления заполнят доступное пространство и дадут вам результат, который вам нужен...
Посмотри на этот статья в MSDN...Надеюсь это поможет :)