私の Silverlight 4DataGrid
コントロールでは、キーを押すとカスタム コマンドを実行する非常に単純な動作をアタッチしたいと考えました。実際には、Enter キーを押すと DataGrid で選択した項目をコミットします。
動作が実際に機能している間(私のコードを参照してください...
//.... in "OnAttached()..."
this.AssociatedObject.AddHandler(Control.KeyDownEvent, new KeyEventHandler(OnKeyDown), true);
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
InvokeCommand();
}
}
...) DataGrid が ENTER キーを押すこと自体を処理しているように見え、次の行に進むという問題があります。明らかに、間違った行がコミットされます。キーを押すと、行の選択が既に変更されているためです。
XAML は次のとおりです。
<data:DataGrid
AutoGenerateColumns="False"
IsReadOnly="True"
ItemsSource="{Binding Path=Data}"
SelectedItem="{Binding SelectedRow, Mode=TwoWay}">
<data:DataGrid.Columns>
<data:DataGridTextColumn Binding="{Binding A}" />
<data:DataGridTextColumn Binding="{Binding B}" />
<data:DataGridTextColumn Binding="{Binding C}" />
</data:DataGrid.Columns>
<i:Interaction.Behaviors>
<behaviors:EnterBehavior Command="{Binding CommitCommand}" />
</i:Interaction.Behaviors>
</data:DataGrid>
デフォルトの ENTER イベントを防ぐ方法を教えてください。