2016-07-22 14 views
0

クリックするたびにラベルを作成するボタンがあります。これを10回クリックしたとしましょう。私がタップしたランダムなラベルを削除するには?tapGesture(Xamarin.Forms)を使用してアプリケーション内の複数のラベルから選択したラベルを削除する方法

PS: my labels are added to a stackLayout 

私のアプリケーションのアイデアは、todoリストを作成することです。エントリーボックスとボタンがあります。私は入力ボックスに何をしたいかを入力し、ボタンをクリックすると、入力したばかりのラベルが作成されます。私が特定のラベルをタップして削除したいもので終わったら、どうすればそれが可能になるのですか?どんな助け?

コード:

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

あなたはこれまでに試したことのいくつかのコード例を追加できますか? – giacomelli

+0

varエントリ=新しいエントリ(); entry.Placeholder = "ここに入力"; entry.BackgroundColor = Color.White; entry.PlaceholderColor = Color.Gray; VAR newButton =新しいボタン {テキスト= "+"、 BackgroundColorを= Color.Purple、 のFontSize = Device.GetNamedSize(NamedSize.Small、typeof演算(ボタン))、 }。 StackLayout stackLayout =新しいStackLayout(); stackLayout.Children.Add(エントリ); stackLayout.Children.Add(newButton); this.Content = stackLayout; –

+0

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

まあ、私はあなたのコードであり、これは、あなたの質問に答えるために少しハードになるかわかりませんが、ここでアイデアです:

あなたはMVVMのアプローチを使用している場合(私はこれをお勧めします)、このラベルを持つビューを作成し、ToDoアイテムデータ(ID、名前、詳細など)を使用してViewModelにバインドし、TapGestureを追加してViewModel内でアクションを実行できます。

編集:

ない、それを行うための最善の方法か、私はそれを行うだろう方法。しかし、ここにあなたのソースに基づいて解決策があります:

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

これは私のコードです –

+0

var entry = new Entry(); entry.Placeholder = "ここに入力"; entry.BackgroundColor = Color.White; entry.PlaceholderColor = Color.Gray; VAR newButton =新しいボタン { テキスト= "+"、 BackgroundColorを= Color.Purple、 のFontSize = Device.GetNamedSize(NamedSize。小型、タイプ(ボタン))、 }; –

+0

StackLayout stackLayout =新しいStackLayout(); stackLayout.Children.Add(frame1); stackLayout.Children.Add(エントリ); stackLayout.Children.Add(newButton); this.Content = stackLayout; –

関連する問題