WPF Textblock, linebreak ในแอตทริบิวต์ Text


96

มีวิธี\nการแบ่งบรรทัดTextBlockหรือไม่?

<TextBlock Text="line1\nLine2" />

หรือมีวิธีที่ดีกว่าในการบังคับให้แบ่งบรรทัดกลางภายในTextแอตทริบิวต์?

<LineBreak />

สิ่งนี้ไม่ได้ผลสำหรับฉันต้องเป็นค่าของTextแอตทริบิวต์เนื่องจากสตริงข้อความถูกตั้งค่าจากแหล่งภายนอก

ฉันคุ้นเคยLineBreakแต่มันไม่ใช่คำตอบที่ฉันกำลังมองหา


2
ใน xaml คุณต้องใช้อักขระควบคุม <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" /> หากคุณต้องการใช้อักขระ \ n จะใช้ได้เฉพาะจากโค้ดหลัง txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire

& # 10; ทำงานได้ดีใน xaml ขอบคุณ JJ_Coder4Hire!
Kay Lee

คำตอบ:


116

ฉันรู้ว่านี่เป็นการยืนยันคำถามเก่า แต่ฉันก็มีปัญหาเดียวกัน วิธีแก้ปัญหาสำหรับฉันคือใช้ฟีดบรรทัดที่เข้ารหัส HTML ( &amp;#10;)

Line1&amp;#10;Line2

ดูเหมือน

บรรทัดที่ 1 บรรทัดที่
2

สำหรับอักขระที่เข้ารหัส HTML เพิ่มเติมโปรดดูw3schools


19
@Knasterbax ถ้าข้อความที่ถูกระบุว่าเป็นเนื้อหาระหว่าง<TextBlock>และแล้วใช่คุณจะต้อง</TextBlock> ทำงานภายในแอตทริบิวต์:<LineBreak/>&#10;Text<TextBlock Text="..." />
Roman Starkov

6
"& # 10;" ทำงานให้ฉัน ฉันไม่ต้องการ "& amp;" ตามที่กล่าวไว้ วิธีนี้จะใช้ได้เช่นกันเมื่อตั้งค่าข้อความดังนี้: <Setter Property = "Text" Value = "Line 1 & # 10; & # 10; Line 2" />
EdwardM

126

ลองสิ่งนี้:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>

1
ยังไม่ได้ลองสิ่งนี้โดยตรง แต่จากด้านบนของหัวของฉันคุณสามารถลอง xml: space = "keep" จากนั้นฝังตัวแบ่งบรรทัดในคุณสมบัติ Text โดยตรง
Paul Alexander

3
เรื่องการใช้อักษรตัวพิมพ์ใหญ่ มันคือ <LineBreak />
M. Dudley

10

วิธีที่ง่ายที่สุดคือ

<TextBlock> blabla <LineBreak /> coucou <LineBreak /> coucou 2 </TextBlock>

ดังนั้นคุณเพียงแค่เขียนโค้ด XAML และ<LineBreak />มีความหมายเดียวกันกับ
ใน HTML หรือ "\ n" ใน C #


1
คำตอบซ้ำสำหรับ Paul Alexander's
vapcguy

7

3
Scott ฉันไม่เข้าใจความคิดเห็นของคุณ
jcollum

1
ปัญหาคือ <LineBreak /> ไม่ทำงานบน Windows XP นอกจากนี้ยังอาจมีบางอย่างที่เกี่ยวข้องกับ. NET เวอร์ชันที่ติดตั้ง ไม่มีข้อยกเว้นและไม่มีข้อผิดพลาดนอกเหนือจากองค์ประกอบภาพที่แสดงไม่ถูกต้อง
Charles


5

<LineBreak /> จะไม่ทำงานหากอยู่ในคอลเลกชันเช่น Grid หรือ StackPanel ในกรณีเช่นนี้สิ่งต่อไปนี้จะได้ผลดังที่แสดง:

LineBreak ภายในคอลเลกชัน


ฉันลองสิ่งนี้เป็นเนื้อหาสำหรับ RadioButton ทุกอย่างดูเหมือนจะทำงานได้ดีจนกระทั่งฉันรันโปรแกรมบน Windows 7 บน windows 7 ปุ่มจะอยู่ตรงกลางในแนวตั้งระหว่างสองบรรทัด Windows 10 จัดเรียงปุ่มให้อยู่ด้านบนสุดตามค่าเริ่มต้น แม้ว่า Windows 10 จะให้เกียรติคุณสมบัติ VerticalContentAlignment แต่ Windows 7 จะละเว้น ฉันต้องใช้โซลูชัน LineBreak
mrfelis

5

วิธีใช้ที่ถูกต้องอาจมีดังต่อไปนี้:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>

3
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

CRLF วิธีง่ายๆ = !&#10;&#13;

!&#10;&#13; - ทำงานกับ wpf, xaml, silverlight ควบคุมเช่น TextBlock, HyperlinkText และอื่น ๆ


1
(ไปแก้ไขคำตอบอื่นของคุณและตั้งค่าสถานะเพื่อยกเลิกการลบ)

3

หากคุณกำลังผูกข้อความของ TextBlock คำตอบอื่น ๆ จะไม่ได้ผล เพียงเพิ่ม '\ n' ในข้อความที่มีผลผูกพันในตำแหน่งที่คุณต้องการทำลาย



1

เพียงแค่ใช้ตัวควบคุม AccessText คุณสามารถใช้มันเหมือนป้ายกำกับและคุณมีคุณสมบัติ TextWrapping = "WrapWithOverflow"

เช่น.

ของฉันเป็นแบบนั้นและมันก็ใช้ได้ดี นอกจากนี้คุณไม่มีปัญหาในการเปลี่ยนข้อความตามปกติ


1

ฉันไปงานปาร์ตี้สาย แต่ .. นี่เป็นวิธีที่ฉันทำไม่มากก็น้อย (โปรดทราบว่า ItemSources ของฉันเป็นสตริงธรรมดาไม่ได้จัดรูปแบบและฉันไม่จำเป็นต้อง 'convertBack' อะไรเลย)

public class SpaceToLineBreakConverter : IValueConverter
{   
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        return (!String.IsNullOrEmpty(value as string)) 
        ? new Regex(@"\s").Replace(value as string, "\n") 
        : value;            
    }

    public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

0

ฉันมีปัญหาที่คล้ายกันและต้องการผูกมาร์กอัป String of xaml กับ TextBlock Essentialy จัดเก็บมาร์กอัปที่เปิดเผยไว้ภายใน TextBlock ในสตริงเพื่อใช้ในภายหลัง

นี่คือวิธีที่ฉันทำ : ฉันทำคลาสย่อยของ TextBlock เพื่อทำให้ InlineCollection ผูกได้และเขียนตัวแปลงระหว่างสตริงและ InlineCollection (หรือจริงๆแล้วรายการทั่วไปของ Inline)


0

สิ่งนี้&amp;#10;ไม่ได้ผลสำหรับฉันเมื่อฉันใช้การผูก แต่ใช้งานได้:

$"first line {Environment.NewLine} second line"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.