在运行时在wpf按钮内左对齐文本

时间:2017-03-07 15:55:45

标签: c# wpf

我在运行时使用ViewBox制作一个Button,在ViewBox中我正在添加一个TextBlock。这一切都很好,除了我似乎无法让文本左对齐。经过一番摆弄后,我意识到这是因为TextBlock不是按钮的全宽。

var row = new RowDefinition();
OrdersGrid.RowDefinitions.Add(row);

var button = new Button();
button.HorizontalAlignment = HorizontalAlignment.Stretch;
button.VerticalAlignment = VerticalAlignment.Stretch;
button.MaxHeight = 40;
button.Background = (Brush)System.Windows.Application.Current.Resources["OrangeGradient"];
button.BorderThickness = new Thickness(.1);
button.Margin = new Thickness(.1);

OrdersGrid.Children.Add(button);
Grid.SetColumn(button, 0);
Grid.SetRow(button, rowNumber);

Viewbox vb = new Viewbox();
vb.StretchDirection = StretchDirection.Both;
vb.HorizontalAlignment = HorizontalAlignment.Stretch;

TextBlock tb = new TextBlock();
tb.HorizontalAlignment = HorizontalAlignment.Stretch;
tb.Text = rowNumber  + " - " + CustomerName;
tb.Padding = new Thickness(0);
tb.TextAlignment = TextAlignment.Left;

vb.Child = tb;
button.Content = vb;

如果我将tb.HorizontalAlignment = HorizontalAlignment.Stretch;更改为tb.Width = 400;,则左对齐。但是,我不能保证这是正确的大小,但它确实将问题缩小到TextBlock的宽度。如何使TextBlock(和ViewBox)成为Button的全宽?

2 个答案:

答案 0 :(得分:2)

HorizontalContentAlignment的{​​{1}}属性设置为Button

Left

答案 1 :(得分:0)

为什么要将内容设为按钮的整个宽度?这会产生什么样的视觉或功能差异?我没有在您的代码中看到任何需要它的内容。如果TextBlock有自己的背景画笔,那将是一个原因,但事实并非如此。

如果您确实需要将文本放在拉伸的中心内,请在按钮内的ViewBox周围放置Border,设置Button.Horizo​​ntalContentAlignment = Stretch,并设置ViewBox.Horizo​​ntalAlignment = Left。

这里的底线是Button的内容默认位于Button的内容区域中,而Button.HorizontalContentAlignment控制着它。其默认值为Center。如果要强制拉伸内容,请将其设置为“拉伸”。

如果您真的只是想让内容合理,请使用mm8的答案。快捷方便。