2009-05-19 23 views
9

Necesito ayuda. No sé si esto es posible. Quiero tener lo siguiente:wpf textbox textwrapping

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

que es una envoltura de texto dentro de una columna de cuadrícula con un ancho *. Quiero que el cuadro de texto tome todo el ancho disponible (por lo tanto, *), pero cuando un usuario agrega texto, quiero que se ajuste cuando llegue al final de la línea (con el espacio disponible).

Actualmente, lo anterior dará un cuadro de texto con todo el ancho, pero cuando se ingresa texto, el ancho del cuadro de texto simplemente crece con el texto.

Sé que puedo establecer MaxWidth = ?, pero el punto en que la columna es * es que no sé cuál es el tamaño de la columna.

Me gustaría decir a la caja de texto "no crezca, lo que wpf le da tomar y no aumentar un píxel más por encima de eso".

Creo que lo que quiero es imposible, porque wpf le pregunta al control qué tan grande quiere ser y cuando el usuario agrega más texto que va más allá del límite, solicita más espacio y expande su ancho hasta el infinito.

Respuesta

9

Intente vincular la propiedad MaxWidth de su TextBox con la propiedad ActualWidth de su columna con la estrella (tendrá que nombrar su columna para hacer esto). Estoy bastante seguro de haber hecho algo así en el pasado.

Algo así como:

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

Buena suerte!

+0

Esto se ve bien, pero no funciona porque la propiedad ActualWidth de ColumnDefinition no es DependencyProperty y MaxWidth siempre será 0. Probado justo ahora ... – Vale

0

Parece que funciona correctamente para mí cuando configuro Grid.Column="1" en el TextBox.

+0

+1 Buena llamada, no me di cuenta de que TextBox no se le dijo que se muestre en la segunda columna (como lo pretende). :) – Pwninstein

+0

Supongo que lo quiere en la columna 0. – Crispy

+0

Él afirma más arriba: "... que es un cuadro de texto que se envuelve dentro de una columna de cuadrícula con ancho *". La columna con ancho = "*" es la segunda columna (Grid.Column = "1"). – Pwninstein

0

Además de lo que dice acerca de RandomEngy Grid.Column="1", también puede tener que establecer algunas propiedades de alineación en la Grid en sí, sobre todo si se fija dentro de otro recipiente con diferente comportamiento del niño Stretch (por ejemplo, un StackPanel).

+0

"Algunas propiedades de alineación"? ¿Cuáles y a qué? – Anthony

+0

@ Anthony: depende de cómo esté alojado el Grid. El comportamiento de dimensionamiento de un elemento WPF no solo depende del elemento en sí, sino también del elemento que lo aloja. Para ver esto en acción, crea un Botón (w/text) dentro de un StackPanel, dentro de una Ventana. Cambia la orientación del StackPanel y observa la diferencia en el comportamiento del tamaño del botón ... – micahtan

Cuestiones relacionadas