我有一个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
用于"堆叠"甚至在可见区域之外的东西,因此它不允许您填充堆叠维度中的剩余空间.
您可以使用DockPanel
with LastChildFill
set 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 次 |
最近记录: |