WPF TextBox不会填写StackPanel

时间:2010-09-17 16:16:07

标签: .net wpf

我在TextBox中有一个StackPanel控件,其Orientation设置为Horizontal,但无法让TextBox填充剩余的StackPanel空间。

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="180" Width="324">

    <StackPanel Background="Orange" Orientation="Horizontal" >
        <TextBlock Text="a label" Margin="5" VerticalAlignment="Center"/>
        <TextBox Height="25" HorizontalAlignment="Stretch" Width="Auto"/>
    </StackPanel>
</Window>

这就是它的样子:

alt text

为什么TextBox没有填充StackPanel?

我知道通过使用Grid控件我可以获得更多控制权,我只是对布局感到困惑。

5 个答案:

答案 0 :(得分:123)

我遇到StackPanel同样的问题,行为是“按设计”。 StackPanel用于“堆叠”甚至在可见区域之外的东西,因此它不允许您填充堆叠维度中的剩余空间。

您可以使用设置为DockPanel LastChildFill的{​​{1}}并将所有非填充控件停靠到true以模拟您想要的效果。

Left

答案 1 :(得分:10)

我建议改用Grid:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="180" Width="324">

    <Grid Background="Orange">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Text="a label" 
           VerticalAlignment="Center"/>
        <TextBox  Grid.Column="1"/>
    </Grid>
</Window>

解决此问题的另一种方法是将标签堆叠在顶部而不是右侧。我注意到UWP有一个内置的头属性,你可以使用它,不确定WPF是否存在头属性。

<TextBox Header="MyLabel" />

答案 2 :(得分:0)

我可以使用以下文本框填充StackPanel:

firebase init

Textbox Horizontally Filling Stackpanel

答案 3 :(得分:0)

按实际主题分类的老问题:

HorizontalAlignment="Stretch"

是必需的。请确保您删除了width

答案 4 :(得分:-1)

此外,最终处理样式,我花了一段时间才弄清楚我的全局 TextBox 样式定义了一个高度,因此 TextBox 不会拉伸。设置 Height="Auto" 后,TextBox 被拉伸。 “Live Property Explorer”是您的朋友。 :)