WPFbutton中的多行文本

如何使用C#获取WPFbutton上的多行文本? 我已经看过在XAML中使用<LineBreak/>例子,但是我的button是用C#编程完全创build的。 button上的数字和标签对应于域模型中的值,所以我不认为我可以使用XAML来指定它。

我已经尝试了下面的天真的做法,但它不起作用。

 Button b = new Button(); b.Content = "Two\nLines"; 

要么

 b.Content = "Two\r\nLines"; 

无论哪种情况,我所看到的只是文本的第一行(“两”)。

或直接在XAML中:

 <Button> <TextBlock>Two<LineBreak/>Lines</TextBlock> </Button> 

我更喜欢这种方式:

 <Button Width="100"> <TextBlock TextWrapping="Wrap">This is a fairly long button label</TextBlock> </Button> 

它为我工作。

答案很简单。 只要使用&#xa; 引入换行符,即:

 <Button Content="Row 1 Text &#xa; Row 2 Text"/> 

这就是我们如何做到这一点,它也容易居中

 <Button Height="40" Width="75"> <StackPanel> <TextBlock Text="Line1" HorizontalAlignment="Center"/> <TextBlock Text="Line2" HorizontalAlignment="Center"/> </StackPanel> </Button> 

结果“\ n”正常工作。 我的网格有一个固定的大小,并且在button中根本没有可视化指示,提供更多的文本(例如,没有“…”表示截断)。 一旦我慷慨地扩大了我的网格的大小,button文本显示在两行。

有几种方法可以通过XAML来做到这一点:

  1. 用换行符添加一个TextBlock:
 <Button> <TextBlock TextAlignment="Center">Line 1<LineBreak/>Line 2</TextBlock> </Button> 
  1. 在文本中添加换行符:

这种方法很简单,但无法轻松控制文本的alignment方式:

  <Button Content="Line 1 &#xa; Line 2"/> 
  1. 添加文本块并包装文本

一旦button尺寸小于TextBlocks的大小,它将简单地将内容分成两行或更多的自动

 <Button> <TextBlock TextWrapping="Wrap" HorizontalAlignment="Center">Line 1 Line 2</TextBlock> </Button> 
  1. 在Button中使用一个StackPanel,并将每行添加为文本块:
 <Button> <StackPanel> <TextBlock Text="Line1" HorizontalAlignment="Center"/> <TextBlock Text="Line2" HorizontalAlignment="Center"/> </StackPanel> </Button> 
  1. 在button中使用网格:
 <Button> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Text="Line1" HorizontalAlignment="Center"/> <TextBlock Text="Line2" HorizontalAlignment="Center"/> </Grid> </Button> 
  • 我相信还有更多的存在,名单基本上是从大多数到最不喜欢的顺序。

你尝试过吗?

 b.Content = new TextBlock { Text = "Two\lLines", TextWrapping = TextWrapping.Wrap }; 

如果这不起作用,那么你可以尝试添加一个StackPanel作为一个孩子,并添加两个TextBlock元素。

怎么样:

 TextBlock textBlock = new TextBlock(); textBlock.Inlines.Add("Two"); textBlock.Inlines.Add(new LineBreak()); textBlock.Inlines.Add("Lines"); Button button = new Button(); button.Content = textBlock; 

如果您使用的是C#3,则可以稍微调整一下:

 Button button = new Button { Content = new TextBlock { Inlines = { "Two", new LineBreak(), "Lines" } } }; 

我遇到过同样的问题。

我试过了:
– button.content =“Line1 \ nLine2”(没有工作,也许我做错了什么);
– 用新标签replacebutton文字(不让你居中alignment文字);
– 用文本块replacebutton文本(我认为这可以让你居中alignment文本,但不包装它);

我已经看到答案提到使用堆叠面板或网格。
我看到答案说不使用文本框 。

即使OP说\n工作,我不认为这是要走的路,在我看来,你只是强迫控制做你想做的,如果在任何时候你需要改变文本,你将不得不去,并检查文本是否正确包装或如果\n需要在另一个位置。
我发现最好的方式(对我来说)是用文本框replacebutton的内容(你可以直接拖放,不需要混淆XAML),并设置以下属性:IsReadOnly = true ;
Focusable = false(可选);
我认为Focusable = false可以防止用户select文本,即使他不能编辑它,我不希望他select它(个人品味)。

这将使文本框的行为类似于标签,但有利于让您居中alignment文本。