TextBox に文字を入力し、その内容がキーの押下に応じて変化する場合、KeyDown イベントが引き続き発生するのはなぜですか? これはこの段階で「処理」されると思っていたでしょう。
3582 次
1 に答える
4
KeyDownイベントは、であるためbubbling event、ケースウィンドウでその親にバブルされます。それをウィンドウにバブルさせたくない場合は、次のようにtextBoxハンドラー自体で処理済みとしてマークする必要があります-
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
一方、テキストボックスでイベントをフックしようとするとPreviewKeyDown、次のことがわかります。ウィンドウのPreviewKeyDownEventが最初に呼び出され、後でテキストボックスのPreviewKeyDownEventが呼び出されます。その背後にある理由は、それはtunelling eventです。ルーティング戦略については、このリンクを参照してください-ルーティング戦略
Morevoerを編集
して、KeyDownイベントがtextBoxからのものかどうかを確認したい場合は、eventArgsのを確認できOriginalSourceます-
private void Window_KeyDown(object sender, KeyEventArgs e)
{
// Check to make sure event comes from window and not from textbox.
if(e.OriginalSource is Window)
{
}
}
于 2012-09-03T14:02:25.483 に答える