[英]Auto-Size and Center Textblock Inside Stackpanel
我目前正在將文本塊動態插入到 Stackpanels 中。 這必須做很多次,而且沒有辦法事先知道 Stackpanel 的大小。
目前,我有這樣的事情:
TextBlock tmp = new TextBlock {
Text = curField.FieldName,
Foreground = new SolidColorBrush(Colors.Red),
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
tmp.MouseLeftButtonUp += imgFormImage_MouseLeftButtonUp;
curField.assocStackpanel.Children.Add(tmp);
curField.assocStackpanel = curField.assocStackpanel;
SelectedFields.Add(curField);
現在,文本塊只是在 Stackpanel 中水平居中顯示,而不是垂直居中顯示。 所以我需要解決這個問題。 此外,理想情況下,我希望能夠動態確定 Textblock 的字體大小,以便填充可用空間。 現在我認為它只是默認(我相信)10。
我決定 go 使用以下內容:
double xpos = Canvas.GetLeft(curField.assocGrid);
double ypos = Canvas.GetTop(curField.assocGrid);
double width = curField.assocGrid.Width;
double height = curField.assocGrid.Height;
TextBlock tmp = new TextBlock {
Text = curField.FieldName,
Foreground = new SolidColorBrush(Colors.Red),
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
FontSize = 30
};
Grid grd = new Grid();
grd.Children.Add(tmp);
Viewbox vb = new Viewbox();
vb.Child = grd;
vb.Width = width;
vb.Height = height;
cvsCenterPane.Children.Add(vb);
Canvas.SetLeft(vb, xpos);
Canvas.SetTop(vb, ypos);
curField.scaleViewbox = vb;
SelectedFields.Add(curField);
首先將文本塊包裝在網格中,然后將生成的網格包裝在視圖框中。 我們得到一個初始的 1:1 比例。 然后通過改變視圖框的尺寸,我們可以獲得所需的填充效果。 我希望我能做的一件事,但找不到方法,就是將結果文本置於縮放視圖框內的中心。 現在,即使視圖框左側有空間,它也會左對齊。 我不確定這是什么原因。
StackPanel 從頂部開始排列控件
將 StackPanel 高度設置為 Auto,然后將 StackPanel 的 VerticalAlignmet 設置為“Center”
垂直方向的StackPanel
StackPanel
沒有水平居中的概念。
StackPanel
只占用與其組成元素一樣多的空間。
您可能需要查看其他布局面板以滿足您的要求。
聽起來您可以將StackPanel
本身居中在Grid
內以實現居中,但這並不能解決增長文本以填充可用空間的要求。
StackPanel 垂直堆疊,其在該方向的大小取決於子項,如果所有子項都垂直居中,它們將重疊,堆棧中垂直 alignment 的整個概念沒有意義。 您可能希望將 StackPanel 本身的VerticalAlignment
設置為Center
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.