Stackpanel内的自动大小和中心文本块

时间:2011-06-13 13:26:43

标签: c# .net silverlight textblock stackpanel

我目前正致力于将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。

4 个答案:

答案 0 :(得分:1)

我决定采用以下方法:

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

答案 1 :(得分:0)

StackPanel开始从顶部

安排控制

将StackPanel高度设置为Auto,然后将StackPanel的VerticalAlignmet设置为“Center”

答案 2 :(得分:0)

对于水平对齐的StackPanel,实际上没有垂直居中的概念,而水平对齐的StackPanel也没有水平居中。

StackPanel只占用与其组成元素一样多的空间。

您可能需要查看其他布局面板以满足您的要求。

听起来您可以将StackPanel本身置于Grid内以实现居中,但这并不能解决增长文本以填充可用空间的要求。

答案 3 :(得分:0)

StackPanel垂直堆叠,其在该方向上的大小取决于子节点,如果所有子节点都垂直居中它们将重叠,则堆栈中垂直对齐的整个概念没有意义。您可能希望将StackPanel本身的VerticalAlignment设置为Center