我目前正在动态地将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/