Pregunta

Supongamos que tengo algo de XAML como este:

<Window.Resources>
  <v:MyClass x:Key="whatever" Text="foo\nbar" />
</Window.Resources>

Obviamente quiero un carácter de nueva línea en la propiedad MyClass.Text, pero el analizador XAML construye el objeto con la cadena literal "foo bar".

¿Existe (a) una manera de convencer al analizador de que traduzca secuencias de escape, o (b) un método .NET para interpretar una cadena como lo haría el compilador de C#?

Me doy cuenta de que puedo entrar allí buscando \n secuencias, pero sería mejor tener una forma genérica de hacer esto.

¿Fue útil?

Solución

Puedes utilizar el escape de caracteres XML.

<TextBlock Text="Hello&#13;World!"/>

Otros consejos

Fuera de mi cabeza, inténtalo;

  1. ¿Quizás una expresión vinculante personalizada?

<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>

  1. ¿Utiliza un recurso estático de cadena?

  2. Haga que Texto sea la propiedad predeterminada de su control y;

<v:MyClass x:Key="whatever">
foo
bar
</v:MyClass>

Me doy cuenta de que puedo entrar buscando secuencias, [...]

Si lo único que te importa son los , entonces puedes probar algo como:

string s = "foo\\nbar";
s = s.Replace("\\n", "\n");

O, para b) ya que no conozco y no puedo encontrar una función incorporada para hacer esto, algo como:

using System.Text.RegularExpressions;

// snip
string s = "foo\\nbar";
Regex r = new Regex("\\\\[rnt\\\\]");
s = r.Replace(s, ReplaceControlChars); ;
// /snip

string ReplaceControlChars(Match m)
{
    switch (m.ToString()[1])
    {
        case 'r': return "\r";
        case 'n': return "\n";
        case '\\': return "\\";
        case 't': return "\t";
        // some control character we don't know how to handle
        default: return m.ToString();
    }
}

Yo usaría el control TextBlock predeterminado como referencia aquí.En ese control haces saltos de línea así:

    <TextBlock>
        Line 1
        <LineBreak />
        Line 2
    </TextBlock>

Debería poder hacer algo similar con su control haciendo que el valor del contenido de su control sea la propiedad del texto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top