Question

Supposons que j'ai du XAML comme ceci:

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

Évidemment, je veux un caractère de nouvelle ligne dans la propriété MyClass.Text, mais l'analyseur XAML construit l'objet avec la chaîne littérale & "toto \ nbar &".

Existe-t-il (a) un moyen de convaincre l'analyseur de traduire les séquences d'échappement, ou (b) une méthode .NET d'interpréter une chaîne de la même manière que le compilateur C #?

Je réalise que je peux y aller à la recherche de \n séquences, mais il serait plus agréable d'avoir un moyen générique de le faire.

Était-ce utile?

La solution

Vous pouvez utiliser un caractère XML d'échappement

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

Autres conseils

De mémoire, essayez;

  1. Une expression de liaison personnalisée peut-être?
  

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

  1. Utiliser une ressource statique de chaîne?

  2. Définissez Text comme propriété par défaut de votre contrôle et;

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

Je réalise que je peux y aller à la recherche de \ n séquences, [...]

Si tout ce qui compte pour vous, c'est \ n, vous pouvez essayer quelque chose comme:

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

Ou, pour b) puisque je ne connais pas et ne trouve pas de fonction intégrée pour le faire, quelque chose comme:

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();
    }
}

Je voudrais utiliser le contrôle TextBlock par défaut comme référence ici. Dans ce contrôle, vous faites des sauts de ligne comme suit:

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

Vous devriez pouvoir faire quelque chose de similaire avec votre contrôle en faisant de la valeur de contenu de votre contrôle la propriété text.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top