4

私の Windows アプリケーションでは、AcceptsReturn プロパティを True に設定して、複数行のテキスト ボックスを作成しました。これにより、ユーザーは複数行のテキストをテキスト ボックスに入力できます。また、テキストボックスでReturn/Enterキーを押すたびに何かしたいです。イベントハンドラのコードは次のとおりです...

private void TextBox_KeyDown(object sender, KeyEventArgs e)
{ 
    if (e.Key == Key.Return)

        // do something here
}

AcceptsReturn が True に設定され、Return キーが押された場合、このイベント ハンドラはまったく呼び出されないようです。その他のキー押下は適切に検出されます。AcceptsReturn が True に設定されておらず、Return キーが押された場合、イベント ハンドラが呼び出され、Return キーの押下が問題なく検出されます。これに関する問題は、Return キーを押してもユーザーがテキストボックスの新しい行に進まないことです (予想どおり)。したがって、Return キーを押して、ユーザーをテキストボックスの新しい行に適切に進めるだけでなく、その Return キーを押したことを検出できるようにしたいと考えています。私のアプローチは間違っていますか?これを行うより良い方法はありますか?

4

1 に答える 1

11

KeyDownはバブリングイベントです。つまり、最初にソース管理(TextBox)で発生し、次に親で発生し、次に親の親で発生し、以下同様に処理されるまで発生します。trueに設定AcceptsReturnすると、コントロールがReturnキーを処理するため、イベントがバブルされません。この場合、イベントのトンネリングバージョンを使用できますPreviewKeyDown。これは、ソース管理に到達する前に、コントロールの各祖先で上から下に発生します。

MSDNのルーティング戦略を参照してください

于 2012-10-03T23:44:29.390 に答える