105 votes

WPF TextBox ne remplira pas StackPanel

J'ai un TextBox de contrôle au sein d'un StackPanel dont Orientation est définie à l' Horizontal, mais ne peut pas obtenir la zone de texte à remplir le reste StackPanel de l'espace.

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>

Et c'est à quoi il ressemble:

alt text

Pourquoi est-ce que la zone de texte ne remplissant pas le StackPanel?

Je sais que je peux avoir plus de contrôle à l'aide d'un Grid le contrôle, je suis juste confus au sujet de la mise en page.

162voto

Zach Johnson Points 12062

J'ai eu le même problème avec StackPanel et le comportement est "par conception". StackPanel est destiné à "empiler" des choses même en dehors de la région visible, ainsi il ne vous permettra pas de remplir l'espace restant dans la dimension d'empilement.

Vous pouvez utiliser un DockPanel avec LastChildFill défini sur true et ancrer tous les contrôles non remplissants au Left pour simuler l'effet vouloir.

 <DockPanel Background="Orange" LastChildFill="True">
    <TextBlock Text="a label" Margin="5" 
        DockPanel.Dock="Left" VerticalAlignment="Center"/>
    <TextBox Height="25" Width="Auto"/>
</DockPanel >
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X