wpf xaml silverlight textblock

wpf - ¿Cómo TextWrap un TextBlock dentro de una columna automática de ancho?



xaml silverlight (1)

Considera algo como sigue:

<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBlock x:Name="WrapTextBlock" Grid.Column="0" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" /> <TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" /> </Grid>

Este XAML permitirá que el texto de WrapTextBlock se WrapTextBlock , haciendo esto, WrapTextBlock tomará todo el espacio y empujará NotWrapTextBlock a la derecha.

Pero lo que quiero hacer es que WrapTextBlock tome el menor espacio posible, presionando NotWrapTextBlock justo después de WrapTextBlock y llene el lado derecho con espacio vacío.

Lo que significa lo siguiente:

<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock x:Name="WrapTextBlock" Grid.Column="0" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" /> <TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" /> </Grid>

Pero la cosa aquí es que ahora el texto en WrapTextBlock ya no se WrapTextBlock .

Me refiero a algo como lo siguiente:

Cuando el texto es demasiado largo requiere deformar:

Cuando el texto es lo suficientemente corto que no requiere deformar:


La razón es al definir su ColumnDefinition como Auto o * no tiene nada para limitar el tamaño disponible para que su TextBlock consuma. Por lo tanto, sería un comportamiento esperado que el texto no se ajuste. Así que tendrás que definir un Width o un Width MaxWidth En la ColumnDefinition o en el ColumnDefinition directamente. Así, por ejemplo;

<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" MaxWidth="50"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock x:Name="WrapTextBlock" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" /> <TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" /> </Grid>

Le daremos su envoltorio, si quiere decir que en su lugar solo permita que tome, por ejemplo, el 7% del espacio que tiene que usar la cuadrícula, cambie el Width a algo así como;

<Grid.ColumnDefinitions> <ColumnDefinition Width="0.07*"/> <ColumnDefinition Width="0.93*"/> </Grid.ColumnDefinitions>

Así que la primera columna ocupará el 7% del espacio disponible, y la columna derecha consumirá el resto. Espero que esto ayude.

Editar adición:

Lo que está mostrando se alinea bastante con su primer fragmento en el que la primera columna debería empujar, la segunda solo debe permitir suficiente espacio para que se muestre su contenido;

<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBlock x:Name="WrapTextBlock" Grid.Column="0" Text="123 456 789 0123 4456 123 123 123 123 1 23 123 " TextWrapping="Wrap" /> <TextBlock x:Name="NotWrapTextBlock" Grid.Column="1" Text="GGG" /> </Grid>