WPF按钮中的多行文本

Pau*_*aul 61 c# wpf multiline

如何仅使用C#在WPF按钮上获取多行文本?我已经看到<LineBreak/>在XAML 中使用的示例,但我的按钮是在C#中以编程方式完全创建的.按钮上的数字和标签对应于域模型中的值,因此我认为我不能使用XAML来指定它.

我尝试了下面的天真方法,但它不起作用.

Button b = new Button();
b.Content = "Two\nLines";
Run Code Online (Sandbox Code Playgroud)

要么

b.Content = "Two\r\nLines";
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,我看到的只是文本的第一行("两个").

小智 96

或直接在XAML中:

<Button>
   <TextBlock>Two<LineBreak/>Lines</TextBlock>  
</Button>
Run Code Online (Sandbox Code Playgroud)


小智 47

我更喜欢这种方式:

<Button Width="100">
  <TextBlock TextWrapping="Wrap">This is a fairly long button label</TextBlock>
</Button>
Run Code Online (Sandbox Code Playgroud)

它对我有用.

  • 我在这里找到了答案:http://stackoverflow.com/a/4624689/13338即 - 使用TextAlignment而不是Horizo​​ntalAlignment. (9认同)
  • 有没有办法让它使用这个解决方案使文本居中? (2认同)

Has*_*man 34

答案很简单.只是&#xa;用来引入换行符,即:

<Button Content="Row 1 Text &#xa; Row 2 Text"/>
Run Code Online (Sandbox Code Playgroud)

  • @Luiey您可以使用此&lt;Button Content =“&amp;&#xa; 7” /&gt; (2认同)

Mer*_*avi 19

有几种方法可以通过XAML执行此操作:

  1. 添加带换行符的TextBlock:
<Button>     
    <TextBlock TextAlignment="Center">Line 1<LineBreak/>Line 2</TextBlock>
</Button>
Run Code Online (Sandbox Code Playgroud)
  1. 在文本中添加换行符:

这种方法很简单,但没有办法轻松控制文本的对齐方式:

    <Button Content="Line 1 &#xa; Line 2"/>
Run Code Online (Sandbox Code Playgroud)
  1. 添加文本块并包装文本

一旦按钮大小小于TextBlocks大小,它将简单地将内容分成两行或更多行

<Button>
  <TextBlock TextWrapping="Wrap" HorizontalAlignment="Center">Line 1 Line 2</TextBlock>
</Button>
Run Code Online (Sandbox Code Playgroud)
  1. 使用Button中的StackPanel,并将每行添加为文本块:
<Button>
    <StackPanel>
        <TextBlock Text="Line1" HorizontalAlignment="Center"/>
        <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </StackPanel>
</Button>
Run Code Online (Sandbox Code Playgroud)
  1. 在按钮中使用网格:
<Button>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
            <TextBlock Text="Line1" HorizontalAlignment="Center"/>
            <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </Grid>
</Button>
Run Code Online (Sandbox Code Playgroud)
  • 我相信还有更多的存在,这个列表基本上是从大多数到最不喜欢的顺序.


Den*_*O J 11

这就是我们在这里做的方式,它也允许轻松居中

<Button Height="40" Width="75">
    <StackPanel>
        <TextBlock Text="Line1" HorizontalAlignment="Center"/>
        <TextBlock Text="Line2" HorizontalAlignment="Center"/>
    </StackPanel>
</Button>
Run Code Online (Sandbox Code Playgroud)


Pau*_*aul 8

原来"\n"工作正常.我的网格具有固定的大小,并且按钮中根本没有可视指示可用的文本更多(例如,没有"......"表示截止).一旦我慷慨地扩展了网格的大小,按钮文本就显示为两行.


Dre*_*kes 6

你试过这个吗?

b.Content = new TextBlock { 
    Text = "Two\lLines", 
    TextWrapping = TextWrapping.Wrap };
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么您可以尝试添加StackPanel作为子项并添加两个TextBlock元素.