Freigeben über


WinRT - No se aplican los colores en un RTF al cargarlos en un RichEditBox

Básico

Cuando cargamos documentos RTF en un RichEditBox esperamos que el formato siempre sea el adecuado, sin embargo en ocasiones, especialmente cuando nos entregan los RTF extraidos en una base de datos o en otros formatos diferentes de RTF, nos encontramos con que los textos coloreados no son procesados.

Será que WinRT es puro amor?

Será por que el amor no conoce color?

EL color dentro de un archivo RTF se encuentra demarcado por medio de los tag {\cf# donde # es un numero de color.

De esta forma si buscamos dentro de un texto coloreado con RTF podemos encontrar un código como el que se ve a continuación:

 {\cf1 Hola Mundo} \b nice text\b0

Donde cf1 hace referencia a un color determinado. Retomando el planteamiento inicial es posible en algunos escenarios que el texto sea mostrado sin el formato de color, esto se debe a que RTF requiere que se establezca previamente una paleta de colores que indique, por ejemplo, a que color equivale cf1.

Para ello, justo al inicio del documento establecemos el tag \colortbl el cual contiene una lista de entradas, donde cada una de estas entradas representa un color, la siguiente muestra una lista de 2 colores definidos, el azul y el rojo.

 {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033 
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;}
}

Este color creado en nuestra paleta de colores puede ser referido en cualquier parte del documento como cf1, de tal forma si deseamos escribir "Hola Mundo" en color azul y rojo basta con hacer lo siguiente:

 {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033 
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;}
{\cf1 Hola}{\cf2 Mundo}
}

Si envias el documento (o sea la cadena de texto con la información) dentro de estos tag entonces al cargar la información dentro del RichEditBox debes asegurarte de indicarle el formato que debe aplicar, ejemplo:

 string cadena = @"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033 
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;}
{\cf1 Hola}{\cf2 Mundo}
}";

MyRichEditBox.Document.SetText(TextSetOptions.FormatRtf, cadena);

De esta forma los documentos RTF cargados mostraran sus colores adecuadamente en un RichEditBox