Текстовое поле WPF не будет заполнять 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>


и вот как это выглядит:



alt text



почему это текстовое поле не заполняет StackPanel?



Я знаю, что могу иметь больше контроля с помощью Grid контроль, я просто запутался в макете.

543   2  

2 ответов:

у меня была такая же проблема с StackPanel, и поведение "по дизайну". StackPanel предназначен для "укладки" вещи, даже за пределами видимой области, поэтому он не позволит вам заполнить оставшееся пространство в укладке размер.

можно использовать DockPanel С LastChildFill значение 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" />

Comments

    Ничего не найдено.