質問

wpftoolkitを使用しています DataGrid データを表示するには。私のユースケースで

  1. ユーザーはセルをクリックして値を入力します(イベントをトラップして、フォーカスをに設定します TextBox)
  2. Enterを押します
  3. 価値がコミットされています
  4. フォーカスは次のセルにシフトします

これで、ユーザーはに値を入力できません 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top