Frage

Angenommen, ich habe einige XAML wie folgt aus:

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

Natürlich möchte ich ein Newline-Zeichen in der MyClass.Text Eigenschaft, aber der XAML-Parser baut das Objekt mit der Zeichenkette "foo \ nbar".

Gibt es (a) einen Weg, um den Parser zu überzeugen Escape-Sequenzen zu übersetzen, oder (b) eine .NET-Methode eine Zeichenfolge in der Art und Weise, dass die C # Compiler würde?

zu interpretieren

Ich weiß, dass ich dort suchte \n Sequenzen gehen kann, aber es wäre schöner, eine generische Art und Weise zu haben, dies zu tun.

War es hilfreich?

Lösung

Sie können XML-Zeichen verwenden zu entkommen

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

Andere Tipps

Aus der Spitze von meinem Kopf, versuchen;

  1. Ein benutzerdefinierte Bindung Ausdruck vielleicht?
  

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

  1. eine Zeichenfolge statische Ressource verwenden?

  2. Text die Standardeigenschaft Ihres Steuerungsart und;

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

Ich weiß, dass ich da reingehen kann \ n Sequenzen suchen, [...]

Wenn alles, was Sie über ist die Pflege \ n ist, dann könnte man versuchen, so etwas wie:

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

Oder, für b), da ich nicht weiß, von und kann keine eingebaute Funktion finden, dies zu tun, so etwas wie:

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

würde ich die Standard-Textblock Steuerung als Referenz hier verwenden. In diesem Steuer tun Sie Zeilenumbrüche in etwa so:

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

Sie sollten in der Lage sein, etwas Ähnliches mit Ihrer Kontrolle zu tun, indem sie den Inhalt Wert Ihrer Kontrolle der Text-Eigenschaft sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top