2009-05-19 16 views
9

Ho bisogno di aiuto. Non so se questo è possibile. Voglio avere il seguente:wpf textbox textboxing

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox TextWrapping="Wrap" MinLines ="5"/> 
    </Grid> 

che è una casella di testo che si avvolge all'interno di una colonna della griglia con larghezza *. Voglio che la casella di testo prenda tutta la larghezza disponibile (quindi *) ma quando un utente aggiunge del testo lo voglio avvolgere quando arriva alla fine della riga (con lo spazio disponibile).

Attualmente sopra fornirà una casella di testo con l'intera larghezza ma quando il testo viene inserito la larghezza della casella di testo cresce semplicemente con il testo.

So di poter impostare MaxWidth = ?, ma il punto in cui si trova la colonna * è che non so quale sia la dimensione della colonna.

Vorrei dire alla casella di testo "non crescere, qualunque sia il wpf che lo prenda e non aumenti di un altro pixel oltre quello".

Penso che quello che voglio sia impossibile, perché wpf chiede al controllo quanto grande vuole essere e quando l'utente aggiunge più testo che va oltre il limite richiede gentilmente più spazio e si spegne espandendo la sua larghezza all'infinito.

risposta

9

Provare a legare la proprietà MaxWidth della proprietà TextBox alla proprietà ActualWidth della colonna a stella (sarà necessario assegnare un nome alla colonna per farlo). Sono abbastanza sicuro di aver fatto qualcosa del genere in passato.

Qualcosa di simile:

MaxWidth={Binding ElementName=MyColumn, Path=ActualWidth} 

Buona fortuna!

+0

Questo sembra ok, ma non funziona perché la proprietà ActualWidth di ColumnDefinition non è DependencyProperty e MaxWidth sarà sempre 0. Testato solo ora ... – Vale

0

Sembra funzionare correttamente per me quando ho impostato Grid.Column="1" sul TextBox.

+0

+1 Buona chiamata, non ho notato che il TextBox non è stato detto di essere visualizzato nella seconda colonna (come egli intende). :) – Pwninstein

+0

Suppongo che lo desideri nella colonna 0. – Crispy

+0

Dichiara sopra: "... che è una casella di testo che si avvolge all'interno di una colonna della griglia con larghezza *". The Column with Width = "*" è la seconda colonna (Grid.Column = "1"). – Pwninstein

0

In aggiunta a ciò che dice RandomEngy su Grid.Column="1", si può anche essere necessario impostare alcune proprietà di allineamento sul Grid stessa, in particolare se è impostato all'interno di un altro contenitore con diverso comportamento del bambino Stretch (per esempio un StackPanel).

+0

"Alcune proprietà di allineamento"? Quali e a cosa? – Anthony

+0

@ Anthony: Dipende da come è ospitata la griglia stessa. Il comportamento di dimensionamento di un elemento WPF dipende non solo dall'elemento stesso, ma anche da quale elemento lo sta ospitando. Per vederlo in azione, crea un pulsante (con testo) all'interno di uno StackPanel, all'interno di una finestra. Modifica l'orientamento di StackPanel e osserva la differenza nel comportamento di dimensionamento del pulsante ... – micahtan