0

WPFには次の階層があります。

ウィンドウ>グリッド>ScrollViewer>StackPanel> [UserControl1、UserControl2 ...]

ウィンドウにフォーカスが合ったらすぐに、StackPanelでキープレスイベントを受け取りたいと思います。どうすればこれを達成できますか?単に、StackPanelのPreviewKeyUp/Downハンドラーにコードを追加することは機能していないようです。これらのイベントは、ウィンドウからStackPanelを介してトンネリングされていないようです。

RoutedEventHandlersを確認する必要がありますか?

編集:私が気付いたのは、スタックパネルにフォーカスがある場合に主要なイベントが受信されるということでした。そうでなければ、そうではありません。

4

2 に答える 2

0

イベントが処理されていないことを確認してください。

たとえば、次の場合:

 <Grid KeyDown="Grid_KeyDown">
    <ScrollViewer  Name="scrollViewer1" >
        <StackPanel Name="stackPanel1" >
            <TextBox Height="23" Name="textBox1" KeyDown="textBox1_KeyDown" />
        </StackPanel>
    </ScrollViewer>
</Grid>

ここに画像の説明を入力してください

テキストボックスイベントが最初に発生したことに注意してください。そして、他のイベントが発生します。

置いたら

e.Handled = true; 

メソッドtextBox1_KeyDown内では、イベントはバブルせず、メソッドGrid_KeyDownが実行されないことを意味します。

プレビューキーワードは逆に機能します。例のようにバブルアウトするイベントの代わりに、トンネルすることを示します。

イベントが処理されていないことを確認してください。たぶん、ユーザーコントロールがそれを処理します。

于 2012-09-12T01:09:34.843 に答える
0

これを試して;

EventManager.RegisterClassHandler(typeof(System.Windows.Controls.Control), System.Windows.Controls.Control.KeyDownEvent, yourdelegate);

アプリケーションの起動に追加します。

于 2012-09-12T04:14:17.397 に答える