WPF UserControl在重新加载后不捕获事件

时间:2012-10-18 07:10:36

标签: c# .net wpf

我有一个应用程序,我在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,但不再捕获keydown事件。知道为什么会这样吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

在OnDataReloaded方法中订阅KeyDown事件。您在那里创建了一个控件的新实例,而XAML中的KeyDown仅适用于创建的第一个实例。

答案 1 :(得分:0)

如果没有看到更多的代码,很难给出任何确定的答案,但有一种可能性就是你的旧密钥处理程序仍在执行中。根据处理程序的作用,它可能会阻止WPF将其他密钥发送事件发送到其他代码。

如果您在替换旧用户控件时没有取消分配事件处理程序,它将继续执行。

这当然是纯粹的猜测,它可能完全是另一回事!

答案 2 :(得分:0)

我不是100%肯定,但我最好的猜测是,因为它是GraphControl的一个新实例 - 事件将被销毁或仍然链接到内存中控件的旧实例。

在您给它一个新实例之前,请确保您取消订阅这些事件,并尝试将事件处理程序重新指向您的方法。

希望有所帮助!

STE。