2010-03-13 22 views
7

Tengo un código XAML:cómo tener un control de llenar todo el espacio disponible

<Grid> 
    <WrapPanel> 
    <TextBox ></TextBox> 
    <Button Content="GetIt" /> 
    </WrapPanel> 
</Grid> 

Cómo que pueda para que todo el espacio disponible para textBox?

Quiero hacer algo así:

| [____________________] [GetIt] |

+2

¿Cuál es el propósito del WrapPanel? –

+0

Simplemente no sé cuál es la mejor manera de hacerlo: P – Neir0

Respuesta

7

Hay un número de maneras en que esto se puede lograr, incluido éste:

<Grid> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <TextBox /> 
    <Button Grid.Column="1">GetIt</Button> 
</Grid> 
+0

¡Gracias! ¿Puedo hacer otra pregunta? Cómo puedo pegar columnas de cuadrícula | [__________] [GetIt] | | ................... | | ... aquí hay otro. | | .multyline cuadro de texto. | | ................... | – Neir0

+0

Ohh lo siento. Mi comentario está perdido de formateo. Quiero decir que http://img708.imageshack.us/img708/2383/screengw.png – Neir0

+0

Neir0 - Estás tratando de obtener el efecto exacto para el que DockPanel está diseñado. Puede hacer lo mismo con un Grid, que es mucho más flexible, pero requiere mucho más XAML y requiere mucho mantenimiento de los valores Row/Column/RowSpan/ColumnSpan si necesita agregar o eliminar elementos. –

3

Prueba esto:

<Grid> 
    <TextBox HorizontalAlignment="Stretch" Margin="2,2,102,2"></TextBox> 
    <Button HorizontalAlignment="Right" Width="100" Content="GetIt" /> 
</Grid> 

Simplemente haga el botón de la anchura deseada y el cuadro de texto se llena el resto.


Gracias por la captura; corregido arriba para manejar correctamente el margen de la derecha. Sin embargo, esto requiere que actualice el margen cuando cambie el ancho del botón. Dos columnas es una mejor solución si planea cambiar el espaciado a menudo. Usar el margen es más claro si tiene varios controles en la cuadrícula y no desea crear cuadrículas anidadas para manejar este tipo de división.

+0

Pero en este caso, el botón está sobre el cuadro de texto. Aquí puede ver la captura de pantalla http://img214.imageshack.us/img214/918/screeneb.png – Neir0

+0

Esa es una técnica que apuesto a que surge el aprendizaje de cómo hacer el diseño en CSS sin tablas. –

+0

También es el tipo de código que Blend 'adivinará' si suelta y cambia el tamaño de los controles dentro de una cuadrícula. –

2

La forma más sencilla es utilizar un DockPanel en lugar de una cuadrícula (el valor predeterminado para LastChildFill es cierto, pero también he añadido aquí para mayor claridad):

<DockPanel LastChildFill="True"> 
    <Button Content="GetIt" DockPanel.Dock="Right" /> 
    <TextBox ></TextBox> 
</DockPanel> 
2

Aquí está una manera de lograr el diseño que' está buscando:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <Style TargetType="TextBox"> 
     <Setter Property="Margin" Value="2"/> 
    </Style> 
    </Page.Resources> 
    <DockPanel> 
    <DockPanel DockPanel.Dock="Top"> 
     <!-- Because the Button is fixed in size, you can divide the row it's 
     in using a DockPanel: the Button is docked to the right edge, and the 
     TextBox fills up the remaining available space. --> 
     <Button Margin="2" Padding="2" DockPanel.Dock="Right">GetIt</Button> 
     <TextBox /> 
    </DockPanel> 
    <!-- Because the TextBoxes *aren't* fixed in size, you can't use docking, 
    as it won't size them. So put them in a Grid and use star sizing to 
    divide the grid's vertical space into two equal parts. The Grid will 
    fill up the remainder of the (outer) DockPanel. --> 
    <Grid> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <TextBox Grid.Row="0">Another TextBox</TextBox> 
     <TextBox Grid.Row="1">Yet another TextBox</TextBox> 
    </Grid> 
    </DockPanel> 
</Page> 
Cuestiones relacionadas