WPF Textblock, linebreak in Text thuộc tính


96

Có cách nào để \nthực hiện ngắt dòng trong a TextBlock?

<TextBlock Text="line1\nLine2" />

Hoặc có cách nào tốt hơn để buộc ngắt dòng giữa, bên trong Textthuộc tính?

<LineBreak />

Điều này không hiệu quả đối với tôi, nó cần phải là giá trị của Textthuộc tính, vì chuỗi văn bản đang được đặt từ nguồn bên ngoài.

Tôi quen LineBreaknhưng đó không phải là câu trả lời tôi đang tìm kiếm.


2
trong xaml, bạn phải sử dụng các ký tự điều khiển <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" />, nếu bạn muốn sử dụng ký tự \ n, nó chỉ hoạt động từ mã phía sau txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire

& # 10; hoạt động tốt trong xaml. Xin cảm ơn JJ_Coder4Hire!
Kay Lee

Câu trả lời:


116

Tôi biết điều này đang giải đáp một câu hỏi cũ, nhưng tôi đã gặp vấn đề tương tự. Giải pháp cho tôi là sử dụng nguồn cấp dữ liệu dòng được mã hóa HTML ( &amp;#10;).

Line1&amp;#10;Line2

Giống như

Dòng1
Dòng2

Để biết thêm về các ký tự được mã hóa HTML, hãy xem w3schools


19
@Knasterbax nếu văn bản được chỉ định làm nội dung giữa <TextBlock></TextBlock>sau đó, bạn sẽ cần <LineBreak/>. &#10;hoạt động bên trong Textthuộc tính:<TextBlock Text="..." />
Roman Starkov

6
"& # 10;" đã làm cho tôi. Tôi không cần "& amp;" như đã đề cập mặc dù. Phương pháp này cũng sẽ hoạt động khi đặt văn bản như vậy: <Setter Property = "Text" Value = "Dòng 1 & # 10; & # 10; Dòng 2" />
EdwardM

126

Thử đi:

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

1
Tôi chưa thử điều này trực tiếp nhưng bạn có thể thử xml: space = "secure" và sau đó nhúng trực tiếp dấu ngắt dòng vào thuộc tính Text.
Paul Alexander

3
Vấn đề vốn. Đó là <LineBreak />.
M. Dudley

10

Cách dễ nhất là

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

Vì vậy, bạn chỉ cần viết mã XAML và <LineBreak />có ý nghĩa chính xác giống như
trong HTML hoặc "\ n" trong C #.


1
Câu trả lời trùng lặp với câu trả lời của Paul Alexander.
vapcguy


5

Làm thế nào về việc ngắt dòng thành hai thẻ?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>

5

<LineBreak /> sẽ không hoạt động nếu nó nằm trong một bộ sưu tập như Grid hoặc StackPanel. Trong những trường hợp như vậy, những điều sau sẽ hoạt động như được hiển thị:

LineBreak bên trong một bộ sưu tập


Tôi đã thử điều này làm nội dung cho RadioButton. Mọi thứ dường như hoạt động tốt cho đến khi tôi chạy chương trình trên Windows 7. Trên windows 7, nút được căn giữa theo chiều dọc giữa hai dòng. Windows 10 căn chỉnh nút trên cùng theo mặc định. Mặc dù Windows 10 sẽ tôn trọng thuộc tính VerticalContentAlignment, nhưng Windows 7 lại bỏ qua nó. Tôi đã phải sử dụng giải pháp LineBreak.
mrfelis 14/02/18

5

Cách sử dụng đúng có thể như sau:

<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 cách đơn giản = !&#10;&#13;

!&#10;&#13; - Làm việc trên tất cả các điều khiển wpf, xaml, silverlight như TextBlock, HyperlinkText và hơn thế nữa


1
(đi sửa chữa câu trả lời và lá cờ khác của bạn cho nó để được lấy lại)

3

Nếu bạn đang ràng buộc Văn bản của TextBlock, không câu trả lời nào khác hoạt động. Chỉ cần thêm '\ n' vào văn bản ràng buộc đến vị trí bạn muốn ngắt.


2

Điều này cũng hoạt động tốt:

<TextBlock>
    <Run Text="My nice text"/>
    <LineBreak/>
    <LineBreak/>
    <Run Text="After some linebreaks, I'm back!"/>
</TextBlock>

1

chỉ cần sử dụng điều khiển AccessText. bạn có thể sử dụng nó như một nhãn và bạn có thuộc tính TextWrapping = "WrapWithOverflow"

ví dụ.

Của tôi là như vậy và nó đang hoạt động tốt. Ngoài ra, bạn không gặp bất kỳ vấn đề nào khi thay đổi văn bản theo cách tự động.


1

Tôi đến muộn với bữa tiệc nhưng .. đây ít nhiều là cách tôi đã làm, (hãy nhớ ItemSources của tôi là chuỗi thuần túy, không được định dạng và tôi không cần phải 'convertBack' bất cứ thứ gì)

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

Tôi đang gặp sự cố tương tự và muốn liên kết Chuỗi đánh dấu xaml với TextBlock. Cơ bản là lưu trữ đánh dấu khai báo bên trong TextBlock trong một chuỗi để sử dụng sau này.

Đây là cách tôi đã làm : Tôi phân lớp TextBlock để làm cho InlineCollection có thể liên kết và viết một Bộ chuyển đổi giữa chuỗi và một InlineCollection (hoặc thực sự là một danh sách chung các Nội tuyến.)


0

điều này &amp;#10;không hiệu quả với tôi, khi tôi sử dụng ràng buộc. Nhưng điều này hoạt động:

$"first line {Environment.NewLine} second line"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.