2016-06-22 16 views
2

ist relevent Code:Warum StackLayouts BackgroundColor überschreibt Etikettenfarbe? Hier

public class App : Application 
{ 
    public App() 
    { 
     StackLayout stack = new StackLayout 
     { 
      BackgroundColor = new Color(245, 240, 236) 
     }; 

     Grid top = new Grid 
     { 
      ... 
     }; 

     Grid grid = new Grid 
     { 
      ... 
     }; 

     for (int i = 0; i < 10; i++) 
     { 
      Label name = getLabel("Worksheet " + i); 
      name.TextColor = Color.Black; 
      grid.Children.Add(name, 0, i); 

      Label date = getLabel("Opened by me " + new DateTime(2016, 1, i + 1 % 30).ToString("dd MMM yyy")); 
      grid.Children.Add(date, 1, i); 

      Label dots = getLabel("dots"); 
      grid.Children.Add(dots, 2, i); 
     } 

     Label menu = getTopLabel("menu"); 
     Label header = getTopLabel("Worksheets"); 
     header.FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)); 
     Label plus = getTopLabel("plus"); 
     Label edit = getTopLabel("edit"); 

     top.Children.Add(menu, 0, 0); 
     top.Children.Add(header, 1, 0); 
     top.Children.Add(plus, 2, 0); 
     top.Children.Add(edit, 3, 0); 

     stack.Children.Add(top); 
     stack.Children.Add(grid); 

     ... 
    } 

    private Label getLabel(string text) 
    { 
     return new Label 
     { 
      ... 
      BackgroundColor = Color.White 
     }; 
    } 

    private Label getTopLabel(string text) 
    { 
     return new Label 
     { 
      ... 
      BackgroundColor = new Color(227, 49, 35), 
      TextColor = Color.Black 
     }; 
    } 
} 

Mein Problem ist, dass, wenn ich die Anwendung ausführen, die alle die Gitter mit einer Hintergrundfarbe in StackLayout definiert werden angezeigt. Es ignoriert alle anderen Farbdefinitionen.
Wie kann ich Hintergrundfarbe für das Layout definieren, aber Hintergrundfarben für Zellen des Rasters beibehalten?

Screenshot:

screenshot

Antwort

0

IhrDeterm StackLayout ist hier nicht zwingend nichts.

Xamarin.Forms bietet eine eigene Color Klasse, die ist sehr irreführend hier in meinen Augen. Der Konstruktor, den Sie zum Erstellen einer Farbe verwendet haben, nimmt doppelte Werte als Parameter r, g und b. Unglücklicherweise werden keine Werte zwischen 0 und 255 erwartet, sondern Werte von 0.0 und 1.0. Es ist sehr verwirrend und dauerte eine Stunde, um herauszufinden ...

Also, wenn Sie mit RGB-Farben arbeiten, verwenden Sie einfach die Color.FromRgb() Methode beim Festlegen der BackgroundColor-Eigenschaft in Ihrem Code.

private Label getTopLabel(string text) 
{ 
    return new Label 
    { 
     ... 
     BackgroundColor = Color.FromRgb(227, 49, 35), 
     TextColor = Color.Black 
    }; 
}