TabControl.VerticalAlignment =拉伸不做任何事情

时间:2009-12-27 20:53:05

标签: wpf layout vertical-alignment tabcontrol

我正在尝试使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>

上面的代码片段会生成以下窗口,而我希望红色边框到达窗口的底部:

alt text

2 个答案:

答案 0 :(得分:19)

问题在于你StackPanel。 StackPanels不会伸展他们的孩子。

相反,请使用DockPanel:最后一个孩子将被拉伸以填充剩余空间(请参阅LastChildFill,默认为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,因为its default value已经Stretch

相关链接:Panels Overview on MSDN

答案 1 :(得分:4)

您可以将高度绑定到父窗口的实际高度。

<TabControl 
    BorderBrush="Red" 
    BorderThickness="2"
    Height="{Binding Path=ActualHeight,
         RelativeSource={RelativeSource Mode=FindAncestor,
            AncestorType={x:Type Window}}}">
    <TabItem Header="Tab1"/>
    <TabItem Header="Tab2"/>
</TabControl>