visual usar tutorial studio presentacion metodos introduccion espaƱol ejemplos como wpf xaml dockpanel

usar - wpf tutorial



El primer hijo de WPF Dockpanel usa el espacio restante (2)

En una ventana que tengo hay una lista de DockPanel para especificar un par de archivos. Cada DockPanel tiene un TextBox (para la ruta) y un botón (para buscar un archivo).

He recreado una página WPF simple para demostrar el problema aquí:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="150" Height="22"> <DockPanel> <TextBox HorizontalAlignment="Stretch"/> <!-- path to file --> <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file --> </DockPanel> </Page>

El problema es que quiero el botón a la derecha del cuadro de texto, pero eso hace que el cuadro de texto sea realmente pequeño, ya que LastChild del DockPanel es el botón que usa en el espacio restante. He intentado cambiar esto al LastChildFill="False" y establecer LastChildFill="False" pero eso solo hace que el botón vuelva a ser pequeño, sin hacer que el TextBox sea ancho (incluso con HorizontalAlignment="Stretch" ).

La razón por la que deseo que los controles estén en ese orden es que quiero que el usuario llegue al cuadro de texto antes del botón cuando usa la tab para navegar en la ventana. TabIndex establecer TabIndex pero las características favoritas de WPF son que los tabindex están en el orden en que se definen las condominios en el XAML. Sin mencionar que probablemente tendría que configurar manualmente TabIndex en todo en la ventana.

Para mí, parece que la configuración de TextBox.HorizontalAlignment no se respeta. ¿Cómo puedo hacer que el primer control use tanto espacio como pueda pero aún así conservar el orden de las pestañas?


Hazlo así:

<DockPanel LastChildFill="True"> <Button Content="..." DockPanel.Dock="Right"/> <!-- button to browse for file --> <TextBox DockPanel.Dock="Left" HorizontalAlignment="Stretch"/> <!-- path to file --> </DockPanel>


Si no quiere el comportamiento de DockPanel, no use un DockPanel.

<Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBox /> <Button Content="..." Grid.Column="1"/> </Grid>