답변:
<TextBlock Text="Stuff on line1
Stuff on line 2"/>
16 진수로 인코딩 된 값을 사용하여 리터럴을 나타낼 수 있습니다. 이 경우 줄 바꿈 (char 10)을 사용했습니다. 당신은 "고전적인"하고 싶은 경우 vbCrLf
에, 당신은 사용할 수 있습니다

그건 그렇고, 구문은 앰퍼샌드, 파운드, 문자 x , 원하는 문자의 16 진수 값, 마지막으로 세미콜론입니다.
또한 완전성을 위해 코드 뒤에 상수 또는 런타임에 구성된 변수처럼 이미 줄 바꿈이 포함 된 텍스트에 바인딩 할 수 있습니다.
소스 XAML에서 공백을 유지하기 위해 xml : space = "preserve"속성을 사용할 수 있습니다.
<TextBlock xml:space="preserve">
Stuff on line 1
Stuff on line 2
</TextBlock>
xml:space="preserve"
들여 쓰기 공간을 유지 한다는 점에 유의해야합니다 (몇 년 후) . 일반적으로 XAML에있는 들여 쓰기 공간을 유지합니다. 따라서 <LineBreak />
위에서 제안한 명시 적 솔루션은 더 깨끗한 솔루션 인 것 같습니다.
사용해야합니다 (자원에 예) 당신은 문자열을해야 할 때 xml:space="preserve"
와 앰퍼샌드 문자 코드 :
<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
또는 텍스트의 리터럴 줄 바꿈 :
<System:String x:Key="TwoLiner" xml:space="preserve">First line
Second line</System:String>
경고 : 당신이 두 번째 예제와 같은 코드를 작성하는 경우, 당신은 삽입 한 두 운영 체제 및 / 또는 텍스트 편집기를 사용하여 라인 엔딩에 따라, 줄 바꿈 또는 캐리지 리턴과 줄 바꿈. 예를 들어 Linux 시스템에서 git로 작성하고 커밋하면 모든 것이 잘 보일 수 있지만 누군가 Windows로 복제하면 git은 줄 끝을\r\n
문자열에 따라 ... 세상을 깰 수도 있습니다.
공백을 보존 할 때주의하십시오. 다음과 같이 쓰면 :
<System:String x:Key="TwoLiner" xml:space="preserve">
First line
Second line
</System:String>
실제로 4 개의 줄 바꿈, 4 개의 캐리지 리턴 및 잠재적으로 보이지 않는 공백을 추가했습니다.
xml:space="preserve"
속성도 적용 할 수 ResourceDictionary
있으므로 모든 리소스 문자열에 속성 을 적용 할 필요는 없습니다.
<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
(첫 번째 줄과 두 번째 줄 사이에 줄 바꿈)
xml:space="preserve"
<TextBlock.Text>
다음과 같이 컨텐츠를 제거 하고 추가하기 만하면됩니다.
<Grid Margin="20">
<TextBlock TextWrapping="Wrap" TextAlignment="Justify" FontSize="17">
<Bold FontFamily="Segoe UI Light" FontSize="70">I.R. Iran</Bold><LineBreak/>
<Span FontSize="35">I</Span>ran or Persia, officially the <Italic>Islamic Republic of Iran</Italic>,
is a country in Western Asia. The country is bordered on the
north by Armenia, Azerbaijan and Turkmenistan, with Kazakhstan and Russia
to the north across the Caspian Sea.<LineBreak/>
<Span FontSize="10">For more information about Iran see <Hyperlink NavigateUri="http://en.WikiPedia.org/wiki/Iran">WikiPedia</Hyperlink></Span>
<LineBreak/>
<LineBreak/>
<Span FontSize="12">
<Span>Is this page helpful?</Span>
<Button Content="No"/>
<Button Content="Yes"/>
</Span>
</TextBlock>
</Grid>
이 작업을 수행하려면 Text 속성에서 수행해야합니다.
<TextBlock>Stuff on line1
Stuff on line 2</TextBlock>
이 질문에 대한 모든 답변을 시도했지만 여전히 그들 중 누구도 당신을 위해 작동하지 이유에 그들의 머리를 긁적, 당신은 내가 우연히 문제의 형태로 실행 된이있을 수 있습니다.
내 TextBlock.Text
속성은 ToolTipService.ToolTip
요소 내부에 있었고 SQL 저장 프로 시저에서 데이터를 가져 오는 객체의 속성에 데이터 바인딩되었습니다. 이제 스토어드 프로 시저 내의이 특정 특성의 데이터가 SQL 함수에서 가져 왔습니다.
아무것도 효과가 없었기 때문에 검색을 포기하고 아래 변환기 클래스를 만들었습니다.
public class NewLineConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var s = string.Empty;
if (value.IsNotNull())
{
s = value.ToString();
if (s.Contains("\\r\\n"))
s = s.Replace("\\r\\n", Environment.NewLine);
if (s.Contains("\\n"))
s = s.Replace("\\n", Environment.NewLine);
if (s.Contains("

"))
s = s.Replace("

", Environment.NewLine);
if (s.Contains("
"))
s = s.Replace("
", Environment.NewLine);
if (s.Contains("
"))
s = s.Replace("
", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains("<br />"))
s = s.Replace("<br />", Environment.NewLine);
if (s.Contains("<LineBreak />"))
s = s.Replace("<LineBreak />", Environment.NewLine);
}
return s;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
@ dparker 's answer 의 Enivornment.NewLine
메소드 를 사용해야했습니다 . 변환기에 개행의 가능한 텍스트 표현을 찾아서로 바꾸도록 지시했습니다 .Environment.NewLine
이것은 효과가 있었다!
그러나 다른 방법 중 어느 것도 데이터 바인딩 속성으로 작동하지 않는 이유에 대해서는 여전히 당황했습니다.
@BobKing의 대답 에 대한 의견을 남겼습니다 .
@BobKing-SQL sproc에서 줄 바꿈이 포함 된 필드에 바인딩 할 때 ToolTipService.ToolTip에서 작동하지 않는 것 같습니다.
그는 다음과 같이 대답했다.
@CodeMaverick 새 줄이 포함 된 텍스트에 바인딩하는 경우 XML 센티넬이 아닌 실제 char 10 값 (또는 13)이어야합니다. 이것은 XAML 파일에 리터럴 줄 바꿈을 작성하려는 경우에만 해당됩니다.
전구가 꺼졌다!
나는 SQL 함수에 들어가서 줄 바꿈의 텍스트 표현을 ...
CHAR( 13 ) + CHAR( 10 )
... 내 TextBlock.Text
바인딩 에서 변환기를 제거 하고 그와 같이 ... 작동했습니다!
이 정보가 도움이되었지만 XAML의 "Content = ..."태그에 추가 할 때 약간의 오류가 발생했습니다.
내용에 여러 줄이 있었고 나중에 지정하지 않아도 내용이 공백을 유지한다는 것을 알았습니다. 그래서 그 문제를 해결하고 공백을 "무시"시키려면 다음과 같이 구현했습니다.
<ToolTip Width="200" Style="{StaticResource ToolTip}"
Content="'Text Line 1'


'Text Line 2'


'Text Line 3'"/>
이것이 다른 누군가를 돕기를 바랍니다.
(출력에는 세 줄의 텍스트 줄이 있으며 그 사이에 빈 줄이 있습니다.)
<TextBlock>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock>
아는 것이 중요하지는 않지만 TextBlock 태그 사이에 지정하는 것을 인라인 내용이라고하며 InlineCollection 인 TextBlock.Inlines 속성으로 이동하고 Inline 유형의 항목을 포함합니다. Inline의 서브 클래스는 Run과 LineBreak입니다. TextBlock을 참조하십시오.
코드 숨김 솔루션
private void Button1_Click(object sender, RoutedEventArgs e)
{
System.Text.StringBuilder myStringBuilder = new System.Text.StringBuilder();
myStringBuilder.Append("Orange").AppendLine();
myStringBuilder.Append("").AppendLine();
myStringBuilder.Append("Apple").AppendLine();
myStringBuilder.Append("Banana").AppendLine();
myStringBuilder.Append("").AppendLine();
myStringBuilder.Append("Plum").AppendLine();
TextBox1.Text = myStringBuilder.ToString();
}