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文本。