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.

Foi útil?

Solução

Você pode usar caracteres XML escapar

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

Outras dicas

Em cima da minha cabeça, tente;

  1. expressão de ligação Um costume talvez?

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

  1. Use um recurso de cadeia estática?

  2. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top