WPFでは、DataGridの選択を同じ行または列のセルのみに制限するにはどうすればよいですか?

datagrid multi-select selection wpf
WPFでは、DataGridの選択を同じ行または列のセルのみに制限するにはどうすればよいですか?

ユーザーがセルを複数選択できるようにするDataGridがあります。 ただし、ビジネスには独自の要件があります。 詳しくは…​

  1. 最初のセル:どこでも選択できます

  2. 2番目のセル:次と同じ行または同じ列になければなりません
    最初のセル。

  3. 追加のセル:定義されているのと同じ行または列にある必要があります
    2番目のセル。

使用するPreviewSelectionChangesメソッドが表示されず、許容選択の境界を越えるShift-Selectionsをブロックする方法も表示されません。

私の現在の考えは、「int? Row; および int? Col; `選択変更イベントを取得した後、選択したセルを整理するために使用するプロパティが、事実の後に起こっているため、それほど明確ではないようです。 「Cell(c、r)が選択されようとしています。 それを許可しますか?」そこから行くことができます。

そう…​ 考えですか?

  3  0


ベストアンサー

少し早く情報を取得する唯一の方法は、MouseDownイベントを利用することです。 「MouseDown」の場所は必ずしも「MouseUp」の場所を示すとは限らないため、見栄えはよくありませんが、一般的には正しいです。 したがって、「MouseDown」が「禁止」セルにあると判断した場合、ユーザーに警告したり、他のタスクを実行したりできます。

また、 `MouseClick`イベントにチェックを入れて(これがこれだと思います)、最初に選択されているセルが「禁止」セルであるかどうかを確認することもできます。 そうであれば、セルの選択を停止するイベントをキャンセルできます。 「DataGrid」の動作方法によっては(まだテストできていません)、いくつかのマウスイベントに対してこれを行う必要があるかもしれません。

0


SelectedCellsChangedイベントに応答し、選択を調整することで成功しました。 ここでは、「同じ列」を左端の列として定義します。これは、左のドラッグで選択する列を切り替えますが、最初に選択した列を覚えてその列に制限するのは簡単です。

例えば:

void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) {
   DataGrid dg = (DataGrid)sender;

   var first_cell = dg.SelectedCells.FirstOrDefault();
   if (first_cell != null) {
      var ok_col = first_cell.Column;
      var to_remove = dg.SelectedCells.Where(c => c.Column != ok_col).ToList();
      foreach (var c in to_remove) dg.SelectedCells.Remove(c);
   }
}

0


タイトルとURLをコピーしました