문제

다음과 같은 XAML이 있다고 가정해 보겠습니다.

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

분명히 MyClass.Text 속성에 개행 문자가 필요하지만 XAML 파서는 리터럴 문자열 "foo bar"를 사용하여 개체를 구성합니다.

(a) 파서가 이스케이프 시퀀스를 변환하도록 설득하는 방법이 있습니까, 아니면 (b) C# 컴파일러가 하는 방식으로 문자열을 해석하는 .NET 메서드가 있습니까?

나는 거기에 들어가서 찾을 수 있다는 것을 깨달았습니다. \n 하지만 이를 수행하는 일반적인 방법을 사용하는 것이 더 좋을 것입니다.

도움이 되었습니까?

해결책

XML 문자 이스케이프를 사용할 수 있습니다.

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

다른 팁

내 머리 꼭대기에서 시도해보십시오.

  1. 아마도 사용자 정의 바인딩 표현식일까요?

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

  1. 문자열 정적 리소스를 사용하시겠습니까?

  2. Text를 컨트롤의 기본 속성으로 설정합니다.

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

나는 거기에 가서 시퀀스를 찾을 수 있다는 것을 깨달았습니다. [...]

관심 있는 것이 뿐이라면 다음과 같이 시도해 볼 수 있습니다.

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

또는 b) 이 작업을 수행하는 내장 함수를 모르고 찾을 수 없기 때문에 다음과 같습니다.

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

여기서는 기본 TextBlock 컨트롤을 참조로 사용하겠습니다.해당 컨트롤에서는 다음과 같이 줄 바꿈을 수행합니다.

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

컨트롤의 콘텐츠 값을 텍스트 속성으로 만들어 컨트롤과 유사한 작업을 수행할 수 있어야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top