.net WPF文本框赢得';t填充StackPanel

.net WPF文本框赢得';t填充StackPanel,.net,wpf,.net,Wpf,我在堆叠面板中有一个文本框控件,其方向设置为水平,但无法让文本框填充剩余的堆叠面板空间 XAML: 这就是它看起来的样子: 为什么这个文本框没有填满StackPanel 我知道我可以通过使用网格控件获得更多的控制,我只是对布局感到困惑。我在StackPanel上也遇到过同样的问题,而且行为是“按设计”的StackPanel用于“堆叠”即使在可见区域之外的东西,因此它不允许您填充堆叠维度中的剩余空间 您可以使用DockPanel,将LastChildFill设置为true,并将所有非填充控件

我在
堆叠面板
中有一个
文本框
控件,其
方向
设置为
水平
,但无法让文本框填充剩余的堆叠面板空间

XAML:


这就是它看起来的样子:

为什么这个文本框没有填满StackPanel


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

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

您可以使用
DockPanel
,将
LastChildFill
设置为
true
,并将所有非填充控件停靠在
左侧
以模拟您想要的效果

<DockPanel Background="Orange" LastChildFill="True">
    <TextBlock Text="a label" Margin="5" 
        DockPanel.Dock="Left" VerticalAlignment="Center"/>
    <TextBox Height="25" Width="Auto"/>
</DockPanel >

我建议改用网格:

<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有一个内置的header属性,您可以使用它,但不确定WPF是否存在header属性

<TextBox Header="MyLabel" />

我可以使用以下方法在StackPanel中填充文本框:

<StackPanel Margin="5,5,5,5">
    <Label Content = "lblExample" Width = "70" Padding="0" HorizontalAlignment="Left"/>
    <TextBox Name = "txtExample" Text = "Example Text" HorizontalContentAlignment="Stretch"/>
</StackPanel>


按实际主题列出的旧问题:

HorizontalAlignment="Stretch"

这是必须的。只需确保删除
宽度

此外,最终还要处理样式,我花了一段时间才发现我的全局文本框样式定义了一个高度,因此文本框不会拉伸。设置Height=“Auto”后,文本框拉伸。“Live Property Explorer”是您的朋友。:)

只是澄清一下-LastChildFill默认设置为“True”,而将文本框的HorizontalAlignment设置为stretch没有任何效果。:-)@地精:是的……我复制并粘贴了OP的代码,但忘了删除
水平对齐
:)说真的,这是故意的?看起来很奇怪,因为控件本身显然跨越了整个宽度。你是说内容区域不一定与可见区域相同吗?@peter很长时间没有做wpf的工作了,但是你可以尝试使用某种网格,将第一列设置为占用可用空间()我在这里参加聚会有点晚了,但是@peter:你可以使用
FlowDirection=“RightToLeft”
DockPanel
上,因此您的最后一个孩子将是左边的孩子,使用剩余的空间。是的,但不是在水平堆叠面板中;你的是垂直的:-)为什么每个人都忽略了这个答案?为我工作。
HorizontalAlignment="Stretch"