我在运行时使用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的全宽?
答案 0 :(得分:2)
将HorizontalContentAlignment
的{{1}}属性设置为Button
:
Left
答案 1 :(得分:0)
为什么要将内容设为按钮的整个宽度?这会产生什么样的视觉或功能差异?我没有在您的代码中看到任何需要它的内容。如果TextBlock有自己的背景画笔,那将是一个原因,但事实并非如此。
如果您确实需要将文本放在拉伸的中心内,请在按钮内的ViewBox周围放置Border
,设置Button.HorizontalContentAlignment = Stretch,并设置ViewBox.HorizontalAlignment = Left。
这里的底线是Button的内容默认位于Button的内容区域中,而Button.HorizontalContentAlignment
控制着它。其默认值为Center。如果要强制拉伸内容,请将其设置为“拉伸”。
如果您真的只是想让内容合理,请使用mm8的答案。快捷方便。