2016-07-22 38 views
0

Ich habe eine Schaltfläche, die jedes Mal ein Label erstellt, sagen wir, ich habe es 10 Mal geklickt, so jetzt habe ich 10 Etiketten erstellt . Wie lösche ich ein zufälliges Etikett, auf das ich tippe?Wie lösche ich ein ausgewähltes Etikett aus mehreren Etiketten in einer Anwendung mit tapGesture (Xamarin.Forms)

PS: my labels are added to a stackLayout 

Die Idee meiner Anwendung ist es, eine To-do-Liste zu erstellen. Ich habe ein Eingabefeld und einen Knopf. Ich tippe was ich machen möchte in das Eingabefeld, klicke dann auf den Button und ein Label wird erstellt mit dem ich gerade den Eintrag eingegeben habe. Wenn ich mit etwas fertig bin, das ich auf ein bestimmtes Label tippen und entfernen möchte, wie ist das möglich? Irgendeine Hilfe?

Code:

var entry = new Entry(); 
entry.Placeholder = "type here"; 
entry.BackgroundColor = Color.White; 
entry.PlaceholderColor = Color.Gray; 
var newButton = new Button { Text = "+", BackgroundColor = Color.Purple, FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Button)), }; 
StackLayout stackLayout = new StackLayout(); 
stackLayout.Children.Add(entry); 
stackLayout.Children.Add(newButton); 
this.Content = stackLayout; 

var tapGestureRecognizer = new TapGestureRecognizer(); 
tapGestureRecognizer.Tapped += labelClick; 
newButton.Clicked += (sender, args) => { label = new Label(); 
label.BackgroundColor = Color.White; 
label.TextColor = Color.Black; 
label.Text = entry.Text; 
entry.Text = ""; 
stackLayout.Children.Add(label); 
label.GestureRecognizers.Add(tapGestureRecognizer);  
+1

bitte, könnten Sie ein Code-Beispiel von dem, was Sie bisher versucht haben, hinzufügen? – giacomelli

+0

var entry = neuer Eintrag(); entry.Placeholder = "hier eingeben"; entry.BackgroundColor = Color.White; entry.PlaceholderColor = Color.Gray; var NewButton = new Button { Text = "+", Background = Color.Purple, Fontsize = Device.GetNamedSize (NamedSize.Small, typeof (Button)), }; StackLayout stackLayout = new StackLayout(); stackLayout.Children.Add (Eintrag); stackLayout.Children.Add (newButton); this.Content = StapelLayout; –

+0

var tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.Tapped + = labelClick; newButton.Clicked + = (Absender, Argumente) => { label = new Label(); label.BackgroundColor = Color.White; label.TextColor = Farbe.Black; label.Text = Eintrag.Text; entry.Text = ""; stackLayout.Children.Add (Label); label.GestureRecognizers.Add (tapGestureRecognizer); }; –

Antwort

1

Nun, habe ich keine Ahnung, wie Ihr Code ist, und das macht ein wenig hart, um Ihre Frage zu beantworten, aber hier ist eine Idee:

Wenn Sie einen MVVM Ansatz verwenden (was ich empfehle), Sie könnten eine Ansicht mit diesem Label erstellen, sie mit den todo Item-Daten (ID, Name, Details, ...) an ein ViewModel binden, den TapGesture hinzufügen und Aktionen im ViewModel ausführen.

Edit:

Nicht der beste Weg, um es oder die Art und Weise zu tun, ich würde es tun. Aber hier ist eine Lösung basierend auf Ihrer Quelle:

public MainPage() 
    { 
     var entry = new Entry(); 
     entry.Placeholder = "type here"; 
     entry.BackgroundColor = Color.White; 
     entry.PlaceholderColor = Color.Gray; 
     var newButton = new Button { Text = "+", BackgroundColor = Color.Purple, FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Button)), }; 
     StackLayout stackLayout = new StackLayout(); 
     stackLayout.Children.Add(entry); 
     stackLayout.Children.Add(newButton); 
     this.Content = stackLayout; 

     newButton.Clicked += (sender, args) => 
     { 
      var label = new Label(); 
      label.BackgroundColor = Color.White; 
      label.TextColor = Color.Black; 
      label.Text = entry.Text; 
      entry.Text = ""; 
      stackLayout.Children.Add(label); 

      var tapGestureRecognizer = new TapGestureRecognizer(); 
      tapGestureRecognizer.Tapped += (sensder, e) => DeleteLabel(stackLayout, label); 

      label.GestureRecognizers.Add(tapGestureRecognizer); 
     }; 
    } 

    void DeleteLabel(StackLayout stackLayout, Label label) 
    { 
     stackLayout.Children.Remove(label); 
    } 
+0

das ist mein Code –

+0

var entry = new Entry(); entry.Placeholder = "hier eingeben"; entry.BackgroundColor = Color.White; entry.PlaceholderColor = Color.Gray; var NewButton = new Button { Text = "+", Background = Color.Purple, Fontsize = Device.GetNamedSize (NamedSize.Small, typeof (Knopf), }; –

+0

StackLayout stackLayout = neu StackLayout(); stackLayout.Children.Add (Bild1); stackLayout.Children.Add (Eintrag); stackLayout.Children.Add (newButton); this.Content = StapelLayout; –