2

私の 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 イベントを防ぐ方法を教えてください。

4

3 に答える 3

0

ここで、handledEventsToo でAddHandler オーバーロードを使用することが役立つかどうかを確認してください。場合によっては、これにより、以前のハンドラーがすでにhandled=trueに設定されていても、ハンドラーを呼び出すことができます。

于 2011-02-21T13:42:41.930 に答える