Центрирование текста по прямоугольнику и размещение прямоугольника на сетке

У меня есть пустая сетка, которая покрывает большую часть экрана. Я хочу поместить любое количество непересекающихся прямоугольников с текстом по центру прямоугольников. Кажется, что мой прямоугольник появляется только в одном месте, а текст только в левом верхнем углу. Не знаю, как центрировать текст в прямоугольнике или поместить второй прямоугольник, скажем, ниже первого. Код, который я пробовал, выглядит следующим образом:

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);
    }
Другие вопросы по тегам