visual tutorial studio .net wpf

.net - tutorial - WPF TextBox no completará StackPanel



wpf xaml (2)

Tengo un control TextBox dentro de un StackPanel cuya Orientation está configurada en Horizontal , pero no puedo hacer que TextBox llene el espacio restante de 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>

Y esto es lo que parece:

¿Por qué ese TextBox no llena el StackPanel?

Sé que puedo tener más control usando un control de Grid , estoy confundido sobre el diseño.


He tenido el mismo problema con StackPanel , y el comportamiento es "por diseño". StackPanel está diseñado para "apilar" cosas incluso fuera de la región visible, por lo que no le permitirá llenar el espacio restante en la dimensión de apilamiento.

Puede usar un DockPanel con LastChildFill establecido en true y acoplar todos los controles que no se llenan a la Left para simular el efecto que desea.

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


Yo recomendaría usar una Grid en su lugar:

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

La otra forma de evitar este problema es apilar la etiqueta en la parte superior en lugar de hacia la derecha. Noté que UWP tiene una propiedad de encabezado integrada que puedes usar para eso, no estoy seguro de si la propiedad del encabezado existe para WPF.

<TextBox Header="MyLabel" />