.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"