문제
다음과 같은 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 World!"/>
다른 팁
내 머리 꼭대기에서 시도해보십시오.
- 아마도 사용자 정의 바인딩 표현식일까요?
<v:MyClass x:Key="whatever" Text="{MyBinder foo\nbar}"/>
문자열 정적 리소스를 사용하시겠습니까?
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>
컨트롤의 콘텐츠 값을 텍스트 속성으로 만들어 컨트롤과 유사한 작업을 수행할 수 있어야 합니다.
제휴하지 않습니다 StackOverflow