我正在尝试将事件标记为已处理,但当我尝试这样做时会引发异常。
我有以下函数,在 LostFocus
的
TextBox
事件上调用:
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
// ...
// do something
// ...
e.Handled = true;
}
但是,一旦执行
e.Handled = true
就会引发以下异常:
“System.InvalidOperationException”类型的未处理异常 发生在PresentationCore.dll中
附加信息:每个 RoutedEventArgs 必须有一个非 null 与之关联的 RoutedEvent。
我尝试将
e.Handled
行移到函数中其他代码之前,但这没有帮助。
为什么会引发异常?有哪些可能的解决方法?
想通了。
TextBox_LostFocus
正在从应用程序中的其他位置调用,事件参数为 null
。
因此,对于某些对
TextBox_LostFocus
的函数调用,e.Handled
不起作用(因为 e
为空),但在其他一些场景中(当框架实际调用它时)可以工作。
当您显式调用这些传入事件参数的事件时,您需要确保在调用函数之前设置
e.RoutedEvent
属性。在这种情况下,您需要调用像TextBox_LostFocus(sender, new RoutedEventArgs(){RoutedEvent = TextBox.LostFocusEvent});
这样的函数。这应该有效