나는이 TextBox
내에서 제어 StackPanel
누구 Orientation
로 설정되어 Horizontal
있지만, 나머지 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
있지만 레이아웃에 대해 혼란스러워합니다.
답변
에서 동일한 문제가 발생 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 >
답변
대신 그리드를 사용하는 것이 좋습니다.
<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" />
답변
실제 주제별 이전 질문 :
HorizontalAlignment="Stretch"
필수입니다. 반드시 당신이를 제거하는 것이 될 Juste width
.
답변
다음을 사용하여 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>