WPF Textblock, Metin özniteliğinde satır sonu


96

A'da \nsatır sonu yapmanın bir yolu var TextBlockmı?

<TextBlock Text="line1\nLine2" />

Yoksa Textözniteliğin içinde orta satır kesmeye zorlamanın daha iyi bir yolu var mı?

<LineBreak />

Bu benim için çalışmıyor, Textözniteliğin değeri olmalı , çünkü metin dizesi bir dış kaynaktan ayarlanıyor.

Aşinayım LineBreakama aradığım cevap bu değil.


2
xaml'de <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" /> kontrol karakterlerini kullanmanız gerekir, eğer \ n karakterini kullanmak istiyorsanız, yalnızca txtBlock.Text = "line1 \ nline2 arkasındaki koddan çalışır ";
JJ_Coder4Hire

& # 10; xaml'de iyi çalışıyor. Teşekkür ederim JJ_Coder4Hire!
Kay Lee

Yanıtlar:


116

Bunun eski bir soruyu yeniden gündeme getirdiğini biliyorum, ama bende de aynı sorun vardı. Benim için çözüm, HTML kodlu satır beslemeleri ( &amp;#10;) kullanmaktı.

Line1&amp;#10;Line2

Gibi görünüyor

1. Satır 2.
Satır

Daha fazla HTML kodlu karakter için w3schools'a göz atın


19
@Knasterbax, metin arasında içerik olarak belirtilmişse <TextBlock>ve </TextBlock>sonra evet, ihtiyacınız olacak <LineBreak/>. niteliğin &#10;içinde çalışır Text:<TextBlock Text="..." />
Roman Starkov

6
"& # 10;" benim için çalıştı. "& Amp;" ye ihtiyacım yoktu Yine de belirtildiği gibi. Bu yöntem, metni şu şekilde ayarlarken de işe yarar: <Setter Property = "Text" Value = "Line 1 & # 10; & # 10; Line 2" />
EdwardM

126

Bunu dene:

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

1
Bunu doğrudan denemedim, ancak aklımın bir ucunda xml: space = "preserve" deneyebilir ve ardından satır sonunu doğrudan Text özelliğine yerleştirebilirsiniz.
Paul Alexander

3
Büyük harf kullanımı önemlidir. <LineBreak />.
M. Dudley

10

En kolay yol

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

Yani sadece XAML kodunu yazarsınız ve HTML'deki veya C #'daki "\ n" ile <LineBreak />tamamen aynı anlama gelir
.


1
Paul Alexander'a yinelenen cevap.
vapcguy


5

Satırı iki etikete bölmeye ne dersiniz?

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

5

Grid veya StackPanel gibi bir koleksiyonun içindeyse <LineBreak /> çalışmayacaktır. Bu gibi durumlarda aşağıdakiler gösterildiği gibi çalışacaktır:

Bir koleksiyon içinde LineBreak


Bunu RadioButton içeriği olarak denedim. Programı Windows 7'de çalıştırana kadar her şey yolunda görünüyordu. Windows 7'de düğme iki satır arasında dikey olarak ortalanmıştı. Windows 10, varsayılan olarak düğmeyi en üste hizalar. Windows 10, VerticalContentAlignment özelliğini kabul ederken, Windows 7 bunu görmezden gelir. LineBreak çözümünü kullanmak zorunda kaldım.
mrfelis

5

Doğru kullanım şekli aşağıdaki olabilir:

<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 basit yolu = !&#10;&#13;

!&#10;&#13; - TextBlock, HyperlinkText ve daha fazlası gibi tüm wpf, xaml, silverlight kontrollerinde çalışın


1
(gidip diğer cevabınızı düzeltin ve

3

TextBlock'un Metnini bağlıyorsanız, diğer yanıtların hiçbiri çalışmaz. Bağlama metnine bölmek istediğiniz yere '\ n' eklemeniz yeterlidir.


2

Bu da iyi çalışıyor:

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

1

sadece AccessText denetimini kullanın. bunu bir etiket gibi kullanabilirsiniz ve TextWrapping = "WrapWithOverflow" özelliğine sahipsiniz

Örneğin.

Benimki böyle ve iyi çalışıyor. Ayrıca, metni dinamik olarak değiştirme konusunda herhangi bir problem yaşamazsınız.


1

Partiye geç kaldım ama .. aşağı yukarı böyle yaptım, (Unutmayın benim ItemSources düz dizelerdir, biçimlendirilmemiş ve hiçbir şeyi 'dönüşüme' ihtiyacım yoktu)

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

Benzer bir sorun yaşıyordum ve String of xaml biçimlendirmesini bir TextBlock'a bağlamak istedim. Bildirim temelli işaretlemeyi daha sonra kullanmak üzere bir metin bloğu içinde bir dizede depolamak.

Şu şekilde yaptım : InlineCollection'ı bağlanabilir hale getirmek için TextBlock'u alt sınıflara ayırdım ve dize ile InlineCollection (veya aslında Inline'ların genel bir listesi) arasına bir Dönüştürücü yazdım.


0

&amp;#10;ciltleme kullandığımda bu benim için işe yaramadı. Ancak bu işe yarar:

$"first line {Environment.NewLine} second line"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.