2010-03-13 11 views
7

Ho un codice XAML:Come avere un controllo riempire tutto lo spazio disponibile

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

come posso per ottenere tutto lo spazio disponibile per textBox?

voglio fare qualcosa di simile:

| [____________________] [GetIt] |

+2

Qual è lo scopo del WrapPanel? –

+0

Non so cosa sia il modo migliore per farlo: P – Neir0

risposta

7

Ci sono un certo numero di modi questo può essere realizzato, compreso questo:

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

Grazie! Posso fare un'altra domanda? Come posso incollare le colonne della griglia. | [__________] [GetIt] | | ................... | | ... ecco un altro. | | .modifica casella di testo. | | ................... | – Neir0

+0

Ohh scusa. Il mio commento ha perso la formattazione. Intendo http://img708.imageshack.us/img708/2383/screengw.png – Neir0

+0

Neir0 - Stai cercando di ottenere l'effetto esatto per cui è progettato DockPanel. Puoi fare la stessa cosa con un Grid, che è molto più flessibile, ma richiede molto più XAML e richiede molta manutenzione dei valori Row/Column/RowSpan/ColumnSpan se devi aggiungere o rimuovere elementi. –

3

Prova questa:

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

Basta fare il pulsante la larghezza desiderata e la casella di testo sarà riempire il resto.


Grazie per la cattura; corretto in precedenza per gestire correttamente il margine a destra. Questo, tuttavia, richiede di aggiornare il margine quando cambia la larghezza del pulsante. Due colonne è una soluzione migliore se si prevede di modificare spesso la spaziatura. L'utilizzo del margine è più pulito se nella griglia sono presenti diversi controlli e non si desidera creare griglie annidate per gestire questo tipo di suddivisione.

+0

Ma in questo caso il pulsante è sopra la casella di testo. Qui puoi vedere lo screenshot http://img214.imageshack.us/img214/918/screeneb.png – Neir0

+0

Questa è una tecnica che sto scommettendo sull'apprendimento del layout in CSS senza tabelle. –

+0

È anche il tipo di codice che Blend "indovina" se stai riducendo e ridimensionando i controlli all'interno di una griglia. –

2

Il modo più semplice è quello di utilizzare un DockPanel invece di una griglia (il valore predefinito per LastChildFill è vero, ma ho anche aggiunto che qui per chiarezza):

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

Ecco un modo per ottenere il layout in cui si' sto cercando:

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