我在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>
这就是它的样子:
为什么TextBox没有填充StackPanel?
我知道通过使用Grid
控件我可以获得更多控制权,我只是对布局感到困惑。
答案 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)
答案 3 :(得分:0)
按实际主题分类的老问题:
HorizontalAlignment="Stretch"
是必需的。请确保您删除了width
。
答案 4 :(得分:-1)
此外,最终处理样式,我花了一段时间才弄清楚我的全局 TextBox 样式定义了一个高度,因此 TextBox 不会拉伸。设置 Height="Auto" 后,TextBox 被拉伸。 “Live Property Explorer”是您的朋友。 :)