当我将 RoutedEventArgs 事件标记为“已处理”时,为什么会引发异常?

问题描述 投票:0回答:2

我正在尝试将事件标记为已处理,但当我尝试这样做时会引发异常。

我有以下函数,在 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
行移到函数中其他代码之前,但这没有帮助。

为什么会引发异常?有哪些可能的解决方法?

c# wpf wpf-controls
2个回答
2
投票

想通了。

TextBox_LostFocus
正在从应用程序中的其他位置调用,事件参数为
null

因此,对于某些对

TextBox_LostFocus
的函数调用,
e.Handled
不起作用(因为
e
为空),但在其他一些场景中(当框架实际调用它时)可以工作。


0
投票

当您显式调用这些传入事件参数的事件时,您需要确保在调用函数之前设置

e.RoutedEvent
属性。在这种情况下,您需要调用像
TextBox_LostFocus(sender, new RoutedEventArgs(){RoutedEvent = TextBox.LostFocusEvent});
这样的函数。这应该有效

© www.soinside.com 2019 - 2024. All rights reserved.