我目前正在动态地将Textblocks插入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的默认值。

最佳答案

我决定采取以下措施:

    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比例。然后,通过更改视图框的尺寸,我们可以获得所需的结果填充。我希望我可以做但无法找到一种方法的一件事是,将生成的文本居中在缩放的视图框中。现在,即使视图框左边有空间,它也会左对齐。我不确定是什么原因造成的。

关于c# - 在Stackpanel内部自动调整大小并居中放置文本块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6331066/

10-17 01:02