如何仅使用C#在WPF按钮上获取多行文本?我已经看到在XAML中使用<LineBreak/>
的示例,但我的按钮是在C#中以编程方式完全创建的。按钮上的数字和标签对应于域模型中的值,因此我认为我不能使用XAML来指定它。
我尝试了下面的天真方法,但它不起作用。
Button b = new Button();
b.Content = "Two\nLines";
或
b.Content = "Two\r\nLines";
在任何一种情况下,我看到的只是文本的第一行(“两个”)。
答案 0 :(得分:91)
直接在XAML中使用OR:
<Button>
<TextBlock>Two<LineBreak/>Lines</TextBlock>
</Button>
答案 1 :(得分:45)
我更喜欢这种方式:
<Button Width="100">
<TextBlock TextWrapping="Wrap">This is a fairly long button label</TextBlock>
</Button>
它对我有用。
答案 2 :(得分:32)
答案很简单。只需使用Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x08146820 in data_start ()
引入换行符,即:


答案 3 :(得分:17)
通过XAML有几种方法可以做到这一点:
session_start(); $_SESSION['kundenr'] = $resultArray[0]['kundenr'];
此方法很简单,但无法轻松控制文本的对齐方式:
<Button> <TextBlock TextAlignment="Center">Line 1<LineBreak/>Line 2</TextBlock> </Button>
一旦按钮大小小于TextBlocks大小,它将简单地将内容分成两行或更多行
<Button Content="Line 1 
 Line 2"/>
<Button> <TextBlock TextWrapping="Wrap" HorizontalAlignment="Center">Line 1 Line 2</TextBlock> </Button>
<Button> <StackPanel> <TextBlock Text="Line1" HorizontalAlignment="Center"/> <TextBlock Text="Line2" HorizontalAlignment="Center"/> </StackPanel> </Button>
答案 4 :(得分:11)
这就是我们在这里做的方式,它也允许轻松居中
<Button Height="40" Width="75">
<StackPanel>
<TextBlock Text="Line1" HorizontalAlignment="Center"/>
<TextBlock Text="Line2" HorizontalAlignment="Center"/>
</StackPanel>
</Button>
答案 5 :(得分:8)
原来“\ n”工作正常。我的网格具有固定的大小,并且按钮中没有视觉指示可用的文本更多(例如,没有“......”表示截止)。一旦我慷慨地扩展了网格的大小,按钮文本就显示为两行。
答案 6 :(得分:5)
你试过这个吗?
b.Content = new TextBlock {
Text = "Two\lLines",
TextWrapping = TextWrapping.Wrap };
如果这不起作用,那么您可以尝试将StackPanel添加为子项并向其添加两个TextBlock元素。
答案 7 :(得分:4)
怎么样:
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" } }
};
答案 8 :(得分:0)
我遇到了同样的问题。
我试过了:
- button.content =“Line1 \ nLine2”(没用,也许我做错了);
- 用新标签替换按钮文本(不允许您居中对齐文本);
- 用文本块替换按钮文本(我认为这可以使文本居中对齐但不包装它);
我看到过提到使用堆叠面板或网格的答案 我看到答案说不要使用Textbox。
即使OP说\n
有效,我也不认为这是可行的方式,在我看来,你只是粗暴地迫使控制权去做你想做的事情,如果有的话指出你需要更改你必须去的文本,检查文本是否正确包装,或者\n
是否需要在另一个位置。
我发现(对我来说)最好的方法是用文本框替换按钮内容(你可以拖放,不需要乱用XAML)并按照说明设置以下属性:
IsReadOnly = true;
Focusable = false(可选);
我认为Focusable = false
阻止用户选择文本,即使他无法编辑它,我也不希望他甚至选择它(个人品味)。
这将使文本框的行为类似于标签,但其优点是可以使文本居中对齐。
答案 9 :(得分:0)
尝试以下代码:
<Button Command="{Binding DeliveryDateCommand}" x:Name="cntlbtnf5" Background="White" BorderBrush="#FFABADB3" Grid.Column="4">
<Border BorderBrush="{x:Null}" Height="Auto">
<TextBlock Text="Ctrl + F5 Delivery BillDate" TextWrapping="Wrap" Width="110" TextAlignment="Center" Height="44" />
</Border>
</Button>
答案 10 :(得分:0)
作为替代/解决方法,如果您必须使用无法轻松编辑其内容的外部自定义按钮,您始终可以使用网格并将按钮的功能部分覆盖在您的视觉效果上(如果它可以是静态的)。< /p>
<Grid>
<TextBlock Foreground="LightGray">Click<LineBreak />Here</TextBlock>
<MyCustomButton BorderBrush="Transparent" IsPressed="{Binding MyBtn.IsPressed, Mode=TwoWay}" />
</Grid>