2016-05-04 5 views
0

Ich habe eine Xamarin App mit einem Grid, wo es ein Label und einen Eintrag gibt. Wenn ich den Text des Eintrags ändere, möchte ich, dass das Etikett sichtbar ist, und wenn es leer ist, soll es das Etikett nicht zeigen.Gitter wird nicht skaliert, wenn die Sichtbarkeit eines Kindes geändert wird

Ich habe eine Demo-App erstellt, um zu überprüfen, dass sie nichts mit meinem Code zu tun hat. Aber der folgende Code schlägt auch fehl

MainPage = new ContentPage 
{ 
    Content = new Grid 
    { 
     ColumnDefinitions = new ColumnDefinitionCollection 
     { 
     new ColumnDefinition { Width = new GridLength(1,GridUnitType.Auto) }, 
     new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) } 
     } 
    } 
}; 

Label label; 
Entry entry; 
Grid mainGrid = ((Grid)((ContentPage)MainPage).Content); 
mainGrid.Add(btnDelete = new MR.Gestures.StackLayout 
    { 
     Children = { 
     new ExtendedLabel { Style = Styles.LargeLabelIcon, Text = "\ue634", TextColor = Color.Black } 
     }, 
     WidthRequest = 50 
    }, 0, 0); 
mainGrid.Children.Add(label = new Label { Text = "TEST", IsVisible = false }, 0, 0); 
mainGrid.Children.Add(entry = new Entry { }, 1, 0); 
entry.TextChanged += (sender, arg) => label.IsVisible = entry.Text.Length > 0; 

Hat jemand eine Idee, wie man es repariert?

Antwort

1

Ich bin nicht sicher, ob dies ist, was Ihr zu erreichen versuchen:

MainPage = new ContentPage 
{ 
    Content = new Grid 
    { 
     ColumnDefinitions = new ColumnDefinitionCollection 
      { 
      new ColumnDefinition { Width = new GridLength(1,GridUnitType.Auto) }, 
      new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) } 
      } 
    } 
}; 

Label label; 
Entry entry; 
Grid mainGrid = ((Grid)((ContentPage)MainPage).Content); 
mainGrid.Children.Add(label = new Label { 
    Text = "TEST", 
    IsVisible = false, 
    VerticalOptions = LayoutOptions.Center, 
    HorizontalOptions = LayoutOptions.Start, 
}, 0, 0); 
mainGrid.Children.Add(entry = new Entry { 
    HorizontalOptions = LayoutOptions.FillAndExpand, 
    VerticalOptions = LayoutOptions.FillAndExpand, 
    BackgroundColor = Color.Black, 
    TextColor = Color.White 
}, 1, 0); 
entry.TextChanged += (sender, arg) => label.IsVisible = entry.Text.Length > 0; 

Ich habe vertikale und horizontale Optionen an die Controller hinzugefügt.

+0

Es zeigt immer noch nicht die Bezeichnung :(Das Raster ändert nicht die Größe der Spalte, so dass es Platz für das Label gibt –

+0

Ist das das richtige Verhalten? Https://media.giphy.com/media/jpAMKvwazudOM/giphy. gif –

+0

Ja, es ist genau das, was ich suche –

Verwandte Themen