2011-07-06 5 views
1

2つの列と複数の行を持つグリッドがあり、各セルにはいくつかのコントロールが含まれています。これらのコントロールの中で、私はそれを押すと、現在のグリッドセル内のすべてのコントロールを削除するボタンがあります。私のボタンが入っているグリッドセルのインデックスを取得するにはどうしたらいいですか?このセルのすべてのコントロールを削除するにはどうすればいいですか?グリッドセルの保持とその中のすべてのコントロールの消去

答えて

3

これは機能しますか?あなたは(ToListメソッドに気づく、LINQを使用して、前の答えを拡張System.Linq

//get the row and column of the button that was pressed. 
var row = (int)myButton.GetValue(Grid.RowProperty); 
var col = (int)myButton.GetValue(Grid.ColumnProperty); 

//go through each child in the grid. 
foreach (var uiElement in myGrid.Children) 
{ //if the row and col match, then delete the item. 
    if (uiElement.GetValue(Grid.ColumnProperty) == col && uiElement.GetValue(Grid.RowProperty) == row) 
      myGrid.Children.Remove(uiElement); 
} 
+0

を削除することができます動作するようです。最初の2行は仕事をしていますが、Linqの3行目のコードが問題を引き起こしているようです。おそらくそれが何をしているのか説明することができれば、その理由を理解しようとすることができます。ありがとう! –

+0

申し訳ありませんが、grid.Childrenとforeachの子をgrid.Childrenに入れて、ボタンと同じ行と列にある場合は削除してください。あなたは実際には1つのステートメントにそれを組み合わせることができます。病気は元の投稿を更新する –

+0

はい、あなたのコメントの後、これはまさに私がやったことですが、実際には機能しません。最初の子を削除した後、2番目のループでは、foreachループでInvalidOperationExceptionが返されます。何か案が?再度、感謝します! –

1

ためusingステートメントを追加する必要があります)ので、すぐいいえ、そうでない要素

//get the row and column of the button that was pressed. 
var row = (int)myButton.GetValue(Grid.RowProperty); 
var col = (int)myButton.GetValue(Grid.ColumnProperty); 

//go through each child in the grid. 
//if the row and col match, then delete the item. 
foreach (var uiElement in myGrid.Children.Where(uiElement => (int)uiElement.GetValue(Grid.ColumnProperty) == col && (int)uiElement.GetValue(Grid.RowProperty) == row).ToList()) 
{ 
    myGrid.Children.Remove(uiElement); 
} 
関連する問題