C# Addhandler不同于+;=处理程序语法
针对c#simular提出了以下问题: 但我的研究给出了不同的结果,与那里给出的答案相反 我用IronPython编写了一个基于 代码如下:C# Addhandler不同于+;=处理程序语法,c#,ironpython,routed-events,C#,Ironpython,Routed Events,针对c#simular提出了以下问题: 但我的研究给出了不同的结果,与那里给出的答案相反 我用IronPython编写了一个基于 代码如下: import wpf from System.Windows import Application, Window from System.Windows.Media import Brushes from System.Windows import EventManager from System.Windows import RoutedEventH
import wpf
from System.Windows import Application, Window
from System.Windows.Media import Brushes
from System.Windows import EventManager
from System.Windows import RoutedEventHandler, RoutedEventArgs
class MyWindow(Window):
def __init__(self):
wpf.LoadComponent(self, 'WpfTestApplication1.xaml')
#self.MyPanel.MouseMove += self.Mouse_Move_Handler
delegate = RoutedEventHandler(self.Mouse_Move_Handler)
self.routed_events = EventManager.GetRoutedEvents()
mouse_move_event = [ev for ev in self.routed_events if ev.Name =='MouseMove'][0]
self.MyPanel.AddHandler(mouse_move_event,delegate)
self.MyPanel.MouseLeave += self.Mouse_Leave_Handler
self.MyButton.MouseMove += self.Button_Handler
self.MyButton.Click += self.Button_Click
self.MyButton.Click += self.Button_Click
def Mouse_Move_Handler(self, sender, e):
self.MyPanel.Background = Brushes.Red
self.MyLabel.Content = 'Inside Panel'
def Mouse_Leave_Handler(self,sender,e):
self.MyPanel.Background = Brushes.Cyan
self.MyLabel.Content = 'Outside Panel'
def Button_Handler(self, sender, e):
self.MyPanel.Background = Brushes.DarkBlue
e.Handled = True
def Button_Click(self, sender, event):
self.MyLabel.Background = Brushes.SaddleBrown
if __name__ == '__main__':
win = MyWindow()
Application().Run(win)
现在,行为似乎完全相同。AddHandler例程有什么原因吗?
还可以考虑尝试执行以下操作:
AddHandler(self.MouseMove,delegate) or AddHandler(Window.MouseMove,delegate)
导致错误的原因:
ArgumentTypeException was unhandled by user code
expected RoutedEvent, got BoundEvent
有人能澄清一下情况吗?区别在哪里
编辑:通过使用Control.MouseMoveEvent而不是mouse_move_事件从EventManager中提取,代码可以减少以下两行:
#self.routed_events = EventManager.GetRoutedEvents()
#mouse_move_event = [ev for ev in self.routed_events if ev.Name =='MouseMove'][0]
我看不出有什么区别