0

TabControl 内にカスタム UserControl があるアプリケーションがあります。時々、アプリ全体でデータを更新する必要があります。それを処理するために、コード ビハインドで次のことを行っています。

    public void OnDataReloaded(object a)
    {
        WindowManager.GraphControl = new GraphControl();
        GraphTab.Content = WindowManager.GraphControl;
        graphloaded = true;
    }

GraphTab は、TabControl の TabItem のインスタンスです。WindowManager は、現在アクティブなユーザー コントロールへの参照を処理する静的クラスです。UserControl に、イベント ハンドラー KeyDown="MyGraphControl_KeyDown_1" を UserControl のプロパティとして追加しました。

上記のコードを実行すると、すべてが期待どおりに機能します。私の TabControl は新しい UserControl をロードしますが、キーダウン イベントはもうキャプチャされません。なぜそうなるのか、何か考えはありますか?

ありがとう!

4

3 に答える 3

0

OnDataReloaded メソッドで KeyDown イベントをサブスクライブします。そこにコントロールの新しいインスタンスを作成しますが、XAML の KeyDown は作成された最初のインスタンスにのみ適用されます。

于 2012-10-18T07:20:24.130 に答える
0

これ以上コードを確認しないと決定的な答えを出すのは困難ですが、1 つの可能性としては、古いキー ダウン ハンドラーがまだ実行されている可能性があります。そのハンドラーの動作によっては、WPF がさらにキーダウン イベントを他のコードに送信するのをブロックしている可能性があります。

古いユーザー コントロールを置き換えるときに、そのイベント ハンドラーの割り当てを解除しないと、引き続き実行されます。

もちろん、それはすべて純粋な当て推量であり、まったく別のものである可能性があります。

于 2012-10-18T07:20:33.253 に答える
0

100% 確実ではありませんが、これは GraphControl の新しいインスタンスであるため、イベントは破棄されたか、メモリ内のコントロールの古いインスタンスにリンクされたままになっていると考えられます。

新しいインスタンスを与える前に、必ずイベントのサブスクライブを解除し、イベント ハンドラーをメソッドに再指定してください。

それが役立つことを願っています!

ステ。

于 2012-10-18T07:20:38.753 に答える