簡體   English   中英

Stackpanel 內的自動調整大小和居中文本塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM