“Dotnet tips, SQL Server tips, Silverlight tips, AJAX tips...”
Read Experts reviews and compare prices to find the right desktop or laptop for you from the huge collection.
El control TextBlock no es uno de los controles mejor documentados en Silverlight... una de los problemas con los que nos solemos encontrar los desarrolladres es como hacer que encaje un texto en un área con un ancho y alto fijos.
Si utilizamos el textblock tal cual, te encontrarás que incluso si le defines un ancho y alto fijo, si el texto es largo, no respetará dichas medidas, este se sale por los lados (overflow). Vamos a ver como arreglar esto paso a paso.
Digamos que queremos encajar un textblock dentro de un rectangulo, por defecto, lo que obtienes tiene bastante mala pinta:
XAML
<!-- Queremos que el texto encaje dentro de este rectangulo --> <Rectangle Canvas.Top="10" Canvas.Left="20" Height="50" Width="130" Stroke="Black" StrokeThickness="1" /> <!-- Cadena de texto larga que nos va a causar quebradores de cabeza :-) --> <TextBlock Canvas.Top="10" Canvas.Left="20" Width="130" Height="50" Text="This is a test, looooong text it should be splitted in multiline and keep the rect width."> </TextBlock>
Pantallazo
¡Vaya! Que cosa más fea, bueno, vamos a indicarle que queremos que el texto se parta en multiples líneas si sobrepasa el ancho máximo, para hacer esto, utilizaremos el atributo TextWrapping="Wrap"
<!-- Queremos que el texto encaje dentro de este rectangulo --> <Rectangle Canvas.Top="10" Canvas.Left="20" Height="50" Width="130" Stroke="Black" StrokeThickness="1" /> <!-- Cadena de texto larga que nos va a causar quebradores de cabeza :-) --> <TextBlock TextWrapping="Wrap" Canvas.Top="10" Canvas.Left="20" Width="130" Height="50" Text="This is a test, looooong text it should be splitted in multiline and keep the rect width."> </TextBlock>
Snapshot
Bueno, esto empieza a tener sentido, ... tienes modo multilinea, y se respeta el ancho indicado, pero... NO LA ALTURA !!!
Y ahora... el truco final: definimos una ventana rectangular del tamaño del rectangulo, y le decimos al textblock que eso es lo único que debe mostrar (con este podrías jugar con la posición de dicha ventana e incluso implementar un scroll del texto moviendo la posición del clipping area)..
<!-- Queremos que el texto encaje dentro de este rectangulo --> <Rectangle Canvas.Top="10" Canvas.Left="20" Height="50" Width="130" Stroke="Black" StrokeThickness="1" /> <!-- Cadena de texto larga que nos va a causar quebradores de cabeza :-) --> <TextBlock TextWrapping="Wrap" Canvas.Top="10" Canvas.Left="20" Width="130" Height="50" Text="This is a test, looooong text it should be splitted in multiline and keep the rect width."> <TextBlock.Clip> <RectangleGeometry Rect="0,0,130,50"/> </TextBlock.Clip> </TextBlock>
Bueno, ya tienes control total sobre tus TextBlocks, siguientes pasos: implementar un scroll del texto con botones, mostrar un indicador de que hay más texto "...", cuando no cabe todo en el área que defines...