2017-03-07 64 views
0

我在運行時用一個ViewBox在ViewBox內部創建一個按鈕,並添加一個TextBlock。這一切工作正常,除了我似乎無法讓文本左對齊。經過一番搗鼓之後,我意識到這是因爲TextBlock不是按鈕的全部寬度。在運行時在一個wpf按鈕中左對齊文本

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

設置ButtonLeftHorizontalContentAlignment屬性:

button.HorizontalContentAlignment = HorizontalAlignment.Left; 
0

爲什麼要進行內容的按鈕全寬?這會造成什麼樣的視覺或功能差異?我沒有看到你的代碼需要這些。如果TextBlock具有自己的背景畫筆,那將是一個原因,但事實並非如此。

如果您確實需要將文本左右放置在拉伸的東西內,請在按鈕內部的ViewBox周圍放置一個Border,設置Button.Horizo​​ntalContentAlignment = Stretch,並設置ViewBox.Horizo​​ntalAlignment = Left。

這裏的底線是Button的內容默認居中在Button的內容區域,並且Button.HorizontalContentAlignment控制着這個。它的默認值是Center。如果您想強制內容拉伸,請將其設置爲拉伸。

如果你真的只想左對齊內容,只需使用mm8的答案。快捷方便。

相關問題