Domanda

Supponiamo di avere un po 'di XAML come questo:

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

Ovviamente voglio un carattere newline nella proprietà MyClass.Text, ma il parser XAML costruisce l'oggetto con la stringa letterale " foo \ nbar " ;.

Esiste (a) un modo per convincere il parser a tradurre le sequenze di escape, oppure (b) un metodo .NET per interpretare una stringa come farebbe il compilatore C #?

Mi rendo conto che posso andare lì in cerca di \n sequenze, ma sarebbe meglio avere un modo generico per farlo.

È stato utile?

Soluzione

Puoi usare l'escaping dei caratteri XML

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

Altri suggerimenti

Fuori dalla mia testa, prova;

  1. Forse un'espressione di associazione personalizzata?
  

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

  1. Utilizzare una risorsa statica stringa?

  2. Imposta Text come proprietà predefinita del controllo e;

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

Mi rendo conto che posso andare lì in cerca di \ n sequenze, [...]

Se tutto ciò che ti interessa è \ n, puoi provare qualcosa del tipo:

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

Oppure, per b) poiché non conosco e non riesco a trovare una funzione incorporata per fare questo, qualcosa del tipo:

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

Vorrei usare il controllo TextBlock predefinito come riferimento qui. In quel controllo fai le interruzioni di linea in questo modo:

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

Dovresti essere in grado di fare qualcosa di simile con il tuo controllo facendo in modo che il valore del contenuto del tuo controllo sia la proprietà text.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top