WPF e formattazione delle stringhe
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.
Soluzione
Puoi usare l'escaping dei caratteri XML
<TextBlock Text="Hello World!"/>
Altri suggerimenti
Fuori dalla mia testa, prova;
- Forse un'espressione di associazione personalizzata?
<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>
-
Utilizzare una risorsa statica stringa?
-
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.