WPF Datagridに焦点を当てます
-
27-10-2019 - |
質問
wpftoolkitを使用しています DataGrid
データを表示するには。私のユースケースで
- ユーザーはセルをクリックして値を入力します(イベントをトラップして、フォーカスをに設定します
TextBox
) - Enterを押します
- 価値がコミットされています
- フォーカスは次のセルにシフトします
これで、ユーザーはに値を入力できません TextBox
(の中に DataGridCell
)彼がセルをクリックしない限り。 TextBox
さまざまなコントロールの一部になることができます( NumericUpDown
, Calendar
等。)。
この動作はExcelに似ていますが、私は焦点を根底に移すことができません TextBox
他のさまざまなラッパーのユーザーコントロールがあります。 DataGridCell
(何かのようなもの DataGridCell
含む MatrixCellContainer
, 、 を含む MatrixCell
, 、 を含む UpDown
コントロール)
ポインターは本当に役立ちます。
アップデート:
私は取り扱いによって探しているものを達成することができます DataGridCell_Selected
このようなイベント:
private void DataGridCell_Selected(object sender, RoutedEventArgs e)
{
Microsoft.Windows.Controls.DataGridCell dataGridCell =
sender as Microsoft.Windows.Controls.DataGridCell;
// ToDo: This is a very bad hack;
// should be replaced by some proper technique
if (dataGridCell != null)
{
NumericUpDownBase<int>[] IntUpDownControls =
dataGridCell.GetChildrenOfType<NumericUpDownBase<int>>();
if (IntUpDownControls.Count() != 0)
{
IntUpDownControls[0].Focus();
//Keyboard.Focus(IntUpDownControls[0]);
}
else
{
NumericUpDownBase<double>[] DblUpDownControls =
dataGridCell.GetChildrenOfType<NumericUpDownBase<Double>>();
if (DblUpDownControls.Count() != 0)
{
DblUpDownControls[0].Focus();
//Keyboard.Focus(DblUpDownControls[0]);
}
}
}
}
しかし、私はこれを達成するためのより良い方法があることを知っています!
解決 2
最後に私はこれで落ち着きました -
private void HandleCellSelected(object sender, RoutedEventArgs e)
{
DataGridCell dataGridCell = sender as DataGridCell;
if (dataGridCell != null)
{
TextBox[] textboxcontrols = dataGridCell.GetChildrenOfType<TextBox>();
if (textboxcontrols.Count() != 0)
{
textboxcontrols[0].Focus();
}
}
}
まだより良いアプローチを探しています...
他のヒント
次のセルにどのように焦点を設定していますか?
WPFには、2つのバージョンのフォーカス、論理フォーカスとキーボードフォーカスがあります。私はあなたが使用していると思う myDataGridCell.Focus()
, 、これは論理的な焦点のみを設定します。
myDataGridCell.Focus(); // Sets Logical Focus
Keyboard.Focus(myDataGridCell); // Sets Keyboard Focus
所属していません StackOverflow