[.net] WPF TextBox가 StackPanel을 채우지 않습니다.

나는이 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는 보이는 영역 외부에서도 사물을 “스택”하기위한 것이므로 스태킹 차원에서 남은 공간을 채울 수 없습니다.

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 >


답변

대신 그리드를 사용하는 것이 좋습니다.

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

텍스트 상자 가로 채우기 스택 패널


답변