我有一个应用程序,我在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事件。知道为什么会这样吗?
谢谢!
答案 0 :(得分:0)
在OnDataReloaded方法中订阅KeyDown事件。您在那里创建了一个控件的新实例,而XAML中的KeyDown仅适用于创建的第一个实例。
答案 1 :(得分:0)
如果没有看到更多的代码,很难给出任何确定的答案,但有一种可能性就是你的旧密钥处理程序仍在执行中。根据处理程序的作用,它可能会阻止WPF将其他密钥发送事件发送到其他代码。
如果您在替换旧用户控件时没有取消分配事件处理程序,它将继续执行。
这当然是纯粹的猜测,它可能完全是另一回事!
答案 2 :(得分:0)
我不是100%肯定,但我最好的猜测是,因为它是GraphControl的一个新实例 - 事件将被销毁或仍然链接到内存中控件的旧实例。
在您给它一个新实例之前,请确保您取消订阅这些事件,并尝试将事件处理程序重新指向您的方法。
希望有所帮助!
STE。