SimpleWindow
载入中...
搜索中...
未找到
EventHandlerWrapper.h
1#pragma once
2
3#include "RoutedEvent.h"
4
5namespace sw
6{
10 template <
11 typename TEventArgs,
12 typename std::enable_if<std::is_base_of<RoutedEventArgs, TEventArgs>::value, int>::type = 0>
13 class RoutedEventHandlerWrapper : public ICallable<void(UIElement &, RoutedEventArgs &)>
14 {
15 private:
20
21 public:
27 : _handler(handler)
28 {
29 }
30
34 virtual void Invoke(UIElement &sender, RoutedEventArgs &args) const override
35 {
36 if (_handler) _handler(sender, static_cast<TEventArgs &>(args));
37 }
38
42 virtual ICallable<void(UIElement &, RoutedEventArgs &)> *Clone() const override
43 {
44 return new RoutedEventHandlerWrapper(_handler);
45 }
46
50 virtual std::type_index GetType() const override
51 {
53 }
54
60 virtual bool Equals(const ICallable<void(UIElement &, RoutedEventArgs &)> &other) const override
61 {
62 if (this == &other) {
63 return true;
64 }
65 if (GetType() != other.GetType()) {
66 return false;
67 }
68 const auto &otherWrapper = static_cast<const RoutedEventHandlerWrapper &>(other);
69 return _handler.Equals(otherWrapper._handler);
70 }
71 };
72}
Definition Delegate.h:21
路由事件处理函数包装类,用于需要转换RoutedEventArgs为特定事件参数类型的情况
Definition EventHandlerWrapper.h:14
virtual void Invoke(UIElement &sender, RoutedEventArgs &args) const override
调用事件处理函数
Definition EventHandlerWrapper.h:34
RoutedEventHandlerWrapper(const Action< UIElement &, TEventArgs & > &handler)
构造函数
Definition EventHandlerWrapper.h:26
virtual std::type_index GetType() const override
获取当前可调用对象的类型信息
Definition EventHandlerWrapper.h:50
virtual bool Equals(const ICallable< void(UIElement &, RoutedEventArgs &)> &other) const override
判断当前可调用对象是否与另一个可调用对象相等
Definition EventHandlerWrapper.h:60
virtual ICallable< void(UIElement &, RoutedEventArgs &)> * Clone() const override
克隆当前可调用对象
Definition EventHandlerWrapper.h:42
表示界面中的元素
Definition UIElement.h:90
Definition Delegate.h:17
路由事件的参数
Definition RoutedEvent.h:149