我有一个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>
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)
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.
| 归档时间: |
|
| 查看次数: |
54048 次 |
| 最近记录: |