2017-10-04 8 views
0

Hallo ich muss dynamische Rechtecke mit Text generieren können. Ich habe jetzt das Problem, dass im nicht in der Lage Text über das RechteckWie kann ich Text zu einem Rechteck in c hinzufügen #

ich die Rechtecken hier erzeugen hinzuzufügen:

public void ShowAppointements() 
    { 
     foreach (Termin termin in MainWindow.termine) 
     { 
      if (termin.week == Int32.Parse(txtWeek.Content.ToString())) 
      { 
       Rectangle rectangle = new Rectangle(); 
       Kalender.Children.Add(rectangle); 
       Grid.SetRow(rectangle, termin.start + 2); 
       Grid.SetColumn(rectangle, termin.day * 2 - 1); 
       Grid.SetColumnSpan(rectangle, 2); 
       Grid.SetRowSpan(rectangle, termin.end - termin.start); 
       rectangle.Fill = termin.color; 
      } 
     } 
    } 

Blick in andere ähnliche Fragen die Antwort immer nur war es, mit Rechtecke zu vermeiden, aber idealy i möchte sie weiterhin benutzen.

+2

Setzen Sie einen TextBlock in die gleiche Grid-Zelle. – Clemens

Antwort

1

Sie könnten ein TextBlock-Kind zum Gitter hinzufügen, an derselben Stelle wie das Rechteck.

Sie auch ein Untergitter mit zwei Kindern, das Rechteck und die TextBlock- schaffen könnte, wie folgt:

Grid subGrid = new Grid(); 
subGrid.Children.Add(rectangle); 
TextBlock textblock = new TextBlock(); 
textblock.Text = "Text to add"; 
subGrid.Children.Add(textblock); 

Kalender.Children.Add(grid); 

Oder die TextBlock- als Kind eines Border hinzufügen, anstatt ein Rechteck aufweist:

var border = new Border 
{ 
    Background = termin.color, 
    Child = new TextBlock { Text = "Some Text" } 
}; 

Grid.SetRow(border, termin.start + 2); 
Grid.SetColumn(border, termin.day * 2 - 1); 
Grid.SetColumnSpan(border, 2); 
Grid.SetRowSpan(border, termin.end - termin.start); 
Kalender.Children.Add(border); 

Oder verwenden Sie einen entsprechend ausgerichtet Label:

var label = new Label 
{ 
    Content = "Some Text", 
    HorizontalContentAlignment = HorizontalAlignment.Center, 
    VerticalContentAlignment = VerticalAlignment.Center, 
    Background = termin.color 
}; 

Grid.SetRow(label, termin.start + 2); 
Grid.SetColumn(label, termin.day * 2 - 1); 
Grid.SetColumnSpan(label, 2); 
Grid.SetRowSpan(label, termin.end - termin.start); 
Kalender.Children.Add(label); 
-1

Yep stellt sich heraus, die Antwort w als wirklich einfach und ich bin ein Idiot. Ich löste es so:

public void ShowAppointements() 
    { 
     foreach (Termin termin in MainWindow.termine) 
     { 
      if (termin.week == Int32.Parse(txtWeek.Content.ToString())) 
      { 
       Rectangle rectangle = new Rectangle(); 
       TextBlock textblock = new TextBlock(); 
       Kalender.Children.Add(rectangle); 
       Kalender.Children.Add(textblock); 
       Grid.SetRow(rectangle, termin.start + 2); 
       Grid.SetColumn(rectangle, termin.day * 2 - 1); 
       Grid.SetColumnSpan(rectangle, 2); 
       Grid.SetRowSpan(rectangle, termin.end - termin.start); 
       Grid.SetRow(textblock, termin.start + 2); 
       Grid.SetColumn(textblock, termin.day * 2 - 1); 
       Grid.SetColumnSpan(textblock, 2); 
       Grid.SetRowSpan(textblock, termin.end - termin.start); 
       textblock.Text = termin.project + "\n" + termin.employee; 
       rectangle.Fill = termin.color; 

      } 
     } 
    } 
Verwandte Themen