TabControl.VerticalAlignment = Растягивание ничего не делает
-
21-09-2019 - |
Вопрос
Я пытаюсь заставить TabControl автоматически изменять размер в соответствии с его внешним пространством (он находится в StackPanel):
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="100">
<Grid>
<StackPanel>
<TabControl
BorderBrush="Red"
BorderThickness="2"
VerticalAlignment="Stretch"
VerticalContentAlignment="Stretch">
<TabItem Header="Tab1"/>
<TabItem Header="Tab2"/>
</TabControl>
</StackPanel>
</Grid>
</Window>
Приведенный выше фрагмент создает следующее окно, хотя я хочу, чтобы красная рамка доходила до нижней части окна:
Решение
Проблема в твоем StackPanel
.StackPanels не будет растягивать своих дочерних элементов.
Вместо этого используйте DockPanel
:Последний дочерний элемент будет растянут, чтобы заполнить оставшееся пространство (см. ПоследнийРебенокЗаполнить, который по умолчанию равен true
).
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="100">
<Grid>
<DockPanel>
<TabControl BorderBrush="Red" BorderThickness="2">
<TabItem Header="Tab1"/>
<TabItem Header="Tab2"/>
</TabControl>
</DockPanel>
</Grid>
</Window>
Явная установка VerticalAlignment
не является необходимым, поскольку его значение по умолчанию уже Stretch
.
Связанная ссылка: Обзор панелей в MSDN
Другие советы
Вы можете привязать высоту к фактической высоте родительского окна.
<TabControl
BorderBrush="Red"
BorderThickness="2"
Height="{Binding Path=ActualHeight,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}">
<TabItem Header="Tab1"/>
<TabItem Header="Tab2"/>
</TabControl>