我在StackPanel
中有一个TextBox
控件,它的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
控件来获得更多的控件,我只是对布局感到困惑。
发布于 2010-09-18 00:21:55
我在StackPanel
上也遇到过同样的问题,而且它的行为是“设计出来的”。StackPanel
旨在“堆叠”甚至在可见区域之外的东西,因此它不允许您填充堆叠维度中的剩余空间。
可以使用LastChildFill
设置为true
的DockPanel
,并将所有非填充控件停靠到Left
以模拟所需的效果。
<DockPanel Background="Orange" LastChildFill="True">
<TextBlock Text="a label" Margin="5"
DockPanel.Dock="Left" VerticalAlignment="Center"/>
<TextBox Height="25" Width="Auto"/>
</DockPanel >
发布于 2018-02-12 22:05:07
我建议使用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有一个内置的header属性,您可以使用它,但不确定WPF的header属性是否存在。
<TextBox Header="MyLabel" />
发布于 2019-11-04 13:56:39
按实际主题列出的旧问题:
HorizontalAlignment="Stretch"
是必备的东西。只需确保删除width
即可。
https://stackoverflow.com/questions/3737077
复制相似问题