WPF e formatação de strings
Pergunta
Suponha que eu tenho alguns XAML como este:
<Window.Resources>
<v:MyClass x:Key="whatever" Text="foo\nbar" />
</Window.Resources>
Obviamente, eu quero um caractere de nova linha na propriedade MyClass.Text, mas o analisador XAML constrói o objeto com a string literal "foo \ NBAR".
Existe (a) uma maneira de convencer o analisador para traduzir seqüências de escape, ou (b) Método .NET para interpretar uma seqüência na maneira que o compilador C # seria?
Eu percebo que eu posso ir lá à procura de seqüências \n
, mas seria melhor ter uma forma genérica para fazer isso.
Solução
Você pode usar caracteres XML escapar
<TextBlock Text="Hello World!"/>
Outras dicas
Em cima da minha cabeça, tente;
- expressão de ligação Um costume talvez?
<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>
-
Use um recurso de cadeia estática?
-
tornar o texto a propriedade padrão de seu controle e;
<v:MyClass x:Key="whatever"> foo bar </v:MyClass>
Eu percebo que eu posso ir lá à procura de \ n seqüências, [...]
Se tudo o que importa é \ n da, então você pode tentar algo como:
string s = "foo\\nbar";
s = s.Replace("\\n", "\n");
Ou, para b) desde que eu não sei de e não pode encontrar uma função interna para fazer isso, 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();
}
}
Gostaria de usar o controle TextBlock padrão como uma referência aqui. Em que o controle que você faz quebras de linha assim:
<TextBlock>
Line 1
<LineBreak />
Line 2
</TextBlock>
Você deve ser capaz de fazer algo semelhante com o seu controle, tornando o valor do conteúdo de seu controle ser a propriedade de texto.