WPF TextBox不会填写StackPanel

Han*_*ank 85 .net wpf

我有一个TextBox控件在StackPanelOrientation设置为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>
Run Code Online (Sandbox Code Playgroud)

这就是它的样子:

替代文字

为什么TextBox没有填充StackPanel?

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

Zac*_*son 134

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

您可以使用DockPanelwith LastChildFillset true和将所有非填充控件停靠Left到模拟所需效果.

<DockPanel Background="Orange" LastChildFill="True">
    <TextBlock Text="a label" Margin="5" 
        DockPanel.Dock="Left" VerticalAlignment="Center"/>
    <TextBox Height="25" Width="Auto"/>
</DockPanel >
Run Code Online (Sandbox Code Playgroud)

  • 只是为了澄清 - LastChildFill默认设置为"True",并且设置Horizo​​ntalAlignment以拉伸TextBox没有任何效果.:-) (7认同)
  • 我在派对上有点晚了,但是@peter:你可以在`DockPanel`上使用`FlowDirection ="RightToLeft"`,所以你的最后一个孩子将是剩下的空间. (5认同)

Bil*_*ore 12

我建议改用网格:

<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>
Run Code Online (Sandbox Code Playgroud)

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

<TextBox Header="MyLabel" />
Run Code Online (Sandbox Code Playgroud)


gli*_*ihm 10

实际主题的老问题:

HorizontalAlignment="Stretch"
Run Code Online (Sandbox Code Playgroud)

是必需的东西。只要确保删除width.

  • @MikhailKalashnikov 因为它在很多情况下不起作用?我知道这对我来说根本不起作用。这是我尝试的第一件事,我很惊讶它不起作用:我得到了与OP相同的行为。 (5认同)