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