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> 
它为我工作。
 答案很简单。 只要使用
 引入换行符,即: 
 <Button Content="Row 1 Text 
 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来做到这一点:
- 用换行符添加一个TextBlock:
<Button> <TextBlock TextAlignment="Center">Line 1<LineBreak/>Line 2</TextBlock> </Button>
- 在文本中添加换行符:
这种方法很简单,但无法轻松控制文本的alignment方式:
<Button Content="Line 1 
 Line 2"/>
- 添加文本块并包装文本
一旦button尺寸小于TextBlocks的大小,它将简单地将内容分成两行或更多的自动
<Button> <TextBlock TextWrapping="Wrap" HorizontalAlignment="Center">Line 1 Line 2</TextBlock> </Button>
- 在Button中使用一个StackPanel,并将每行添加为文本块:
<Button> <StackPanel> <TextBlock Text="Line1" HorizontalAlignment="Center"/> <TextBlock Text="Line2" HorizontalAlignment="Center"/> </StackPanel> </Button>
- 在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文本。