Coloración selectiva en contenido dinámico de TextBlock en WPF

Para la coloración selectiva de contenido estático, la siguiente sugerencia funciona bien: ¿Es posible colorear de forma selectiva un TextBlock envolvente en Silverlight / WPF?

Sin embargo, mi contenido se generará en tiempo de ejecución. Por ej. si el contenido generado es: "A Quick Brown Fox", entonces necesito que la cadena "Brown" sea de color marrón y "Fox" de color rojo.

La lista de colores de palabras clave está fija y disponible para mí en tiempo de ejecución.

He mirado la página de formato de texto avanzado en MSDN, pero es demasiado complicado para mí, también la muestra allí no se compila :(

Estoy pensando en crear un control personalizado que pueda hacer esto por mí. Avíseme si alguien tiene alguna idea sobre cómo hacer esto.

Gracias de antemano.

preguntado el 27 de abril de 10 a las 03:04

1 Respuestas

La idea se explica en su enlace: Tener una propiedad para el texto en el control personalizado. Luego, escanee el texto en busca de palabras y cree las ejecuciones adecuadas. Al final, asígnelos todos a la colección de líneas de TextBox.

En este ejemplo, simplemente usé string.Split (). Es posible que pierda palabras si están divididas por otros signos de puntuación.

Dictionary<string, Brush> colorDictionary;
string text;  // The value of your control's text property

string[] splitText = text.Split(' ', ',', ';', '-');
foreach (string word in splitText)
{
    if (string.IsNullOrEmpty(word))
    {
        continue;
    }

    Brush runColor;
    bool success = colorDictionary.TryGetValue(word, out runColor);
    if (success)
    {
        Run run = new Run(word);
        run.Background = runColor;
        textbox.Inlines.Add(run);
    }
    else
    {
        Run run = new Run(word);
        texbox.Inlines.Add(run);
    }
}

Respondido 27 Abr '10, 08:04

gracias, funcionó para mí, pero tuve que crear un control de usuario. ¿No es la subclasificación de Textblock una mejor manera de hacerlo? pero no hay nada que anular en la clase TextBlock - nitin chaudhari

Con UserControl puede controlar lo que está visible "afuera". No creo que haya nada de malo en usar UserControls. - daniel rosa

Lo que necesito es un caso especial de TextBlock (aquí creo que el control personalizado debería ser la solución) y no un TextBlock especialmente controlado (que sería el control del usuario). - nitin chaudhari

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.