2015-12-16 2 views
-1

J'ai une grille vide qui couvre la plus grande partie de l'écran. Je veux mettre n'importe quel nombre de rectangles ne se chevauchant pas avec du texte centré dans les rectangles. Mon rectangle ne semble apparaître qu'à un endroit, et le texte est seulement en haut à gauche. Aucune idée de comment centrer le texte dans le rectangle, ou placer un second rectangle dire ci-dessous le premier. Le code que j'ai essayé ressemble à ceci:Centrage du texte sur un rectangle et placement de rectangle sur la grille

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); 
} 

Ce doit être dynamique donc rien dans le fichier XAML va travailler pour la création des rectangles ou du texte sur eux.

Répondre

0

je dois aller regarder vs pour être sûr, mais:

mytext.TextAlignment = TextAlignment.Left; 

Avez-vous essayé TextAlignment.Center à la place?

0

Pour une grille, vous devrez probablement calculer la marge. Ou divisez la grille en sections.

L'alternative serait d'utiliser un StackPanel ou WrapPanel en fonction de ce dont vous avez besoin.

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); 
    }