Центрирование текста по прямоугольнику и размещение прямоугольника на сетке
У меня есть пустая сетка, которая покрывает большую часть экрана. Я хочу поместить любое количество непересекающихся прямоугольников с текстом по центру прямоугольников. Кажется, что мой прямоугольник появляется только в одном месте, а текст только в левом верхнем углу. Не знаю, как центрировать текст в прямоугольнике или поместить второй прямоугольник, скажем, ниже первого. Код, который я пробовал, выглядит следующим образом:
private void Terminal(string text)
{
// Add a Rectangle Element
TextBlock mytext = new TextBlock();
mytext.Text = text;
mytext.TextAlignment = TextAlignment.Left;
mytext.TextWrapping = TextWrapping.Wrap;
Rectangle myRect = new System.Windows.Shapes.Rectangle();
myRect.Stroke = System.Windows.Media.Brushes.Black;
myRect.Fill = System.Windows.Media.Brushes.Plum;
myRect.HorizontalAlignment = HorizontalAlignment.Left;
myRect.VerticalAlignment = VerticalAlignment.Top;
myRect.Height = 40;
myRect.Width = 100;
myRect.RadiusX = 20; // round the corners
myRect.RadiusY = 20; // round the corners
grid.Children.Add(myRect);
grid.Children.Add(mytext);
}
Это должно быть динамически, поэтому ничто в файле.xaml не будет работать для создания прямоугольников или текста на них.
2 ответа
Я должен был бы посмотреть на против, чтобы быть уверенным, но:
mytext.TextAlignment = TextAlignment.Left;
Вы пробовали TextAlignment.Center вместо этого?
Для сетки вам, вероятно, потребуется рассчитать маржу. Или разделите сетку на разделы.
Альтернативой может быть использование StackPanel или WrapPanel в зависимости от того, что вам нужно.
private void Terminal(string text)
{
Grid aGrid = new Grid()
{
Height=40,
Width=100
};
TextBlock myText = new TextBlock()
{
Text = text,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
Rectangle myRect = new Rectangle()
{
Stroke = Brushes.Black,
Fill = Brushes.Plum,
Height = 40,
Width = 100,
RadiusX = 20,
RadiusY = 20
};
aGrid.Children.Add(myRect);
aGrid.Children.Add(myText);
mainStackPanel.Children.Insert(0, aGrid);
}