datagridtemplatecolumnキーボードナビゲーションの問題のwpf autocompletebox
-
26-10-2019 - |
質問
datagridtemplatecolumnの編集テンプレート内のWPFツールキットのAutoCompleteBoxをWPF4のテンプレートを使用しています。 DatagridバインディングとAutoCompleteboxのGotchasと不完全性に関するすべての微細なバインディングの問題を整理すると、ほとんどの場合、それは十分に機能します。ここまでは順調ですね。問題はキーボードナビゲーションです。
これがシナリオです。2つの列を持つデータグリッドがあります。 1つ目は、編集テンプレートにAutoCompleteBoxがあるDataGridTemplateColumnです。 2番目は、普通のdatagridTextColumnです。
行の編集を呼び出すと、AutoCompleteBoxでアイテムを選択できます。タブを押して次の列に移動しますが、代わりに行の編集がコミットされ、キーボードのフォーカスは次の列に移動しません。これがdatagridTextColumnの場合、編集モードにとどまり、次の列を編集させてください。これは、新しい行でも発生します。
私の考えでは、WPFがAutoCompleteBoxから出てきたときにキーボードのフォーカスを送信することを決定した場所に何か問題があるようですが、私はそれについて何ができるかを理解できず、私も見つけることができませんでした同じ問題について話している人は誰でも、私が何か間違ったことをしているか、他の誰も彼らのグリッドを通してキーボードのナビゲーションを気にしないことを示唆しています。私は、準備を上書きするテンプレートコラムのサブクラスを使用しています。これは、セルの編集時にAutocompleteBoxにフォーカスがすぐに着地することを確認します(他の回答に従って)が、そのコードをすべて無効にしても問題は持続します。私が知る限りの策略。
何か案は?
XAMLは多かれ少なかれこのように見えます(もちろん、グリッドには2つ以上の列があり、いくつかのかなり複雑なデータバインディングが進行しています。バインディングを除外し、全体的な構造に保持しています)。
<DataGrid>
<DataGridTemplateColumn Header="AutoCompleteBox">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate><TextBlock /></DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<toolkit:AutoCompleteBox>
<!-- autocompletebox's item template etc. -->
</toolkit:AutoCompleteBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Text" />
</DataGrid>
解決
フォーカスを次のコラムに移動するために、拡張クラスを作成しました(タブは私にとって正常に動作します):
public class ExAutoCompleteBox : AutoCompleteBox
{
public ExAutoCompleteBox()
{
PreviewKeyUp += (o, e) =>
{
if (e.Key == Key.Enter)
{
((UIElement)Keyboard.FocusedElement).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
};
}
}