我试图制作这种扩展方法。在演员表上收到错误说“无法将类型T转换为MouseEventArgs'”。我不能翻转对象(从MouseEventArgs : InputEventArgs
开始)?
如果您感到好奇,我只是使用处理程序方法中的基本InputEventArgs来使用它来共享Mouse和Touch事件之间的事件处理程序。
public static class InputEventArgsExtensions
{
public static Point GetPosition<T>(this T e, IInputElement obj)
where T : InputEventArgs
{
if (e is MouseEventArgs)
return ((MouseEventArgs)e).GetPosition(obj);
else if (e is TouchEventArgs)
return ((TouchEventArgs)e).GetTouchPoint(obj).Position;
return new Point();
}
}
答案 0 :(得分:2)
我试过这样做,它对我有用。
public static class InputEventArgsExtensions
{
public static Point GetPosition<T>(this T e, IInputElement obj)
where T : InputEventArgs
{
if (e is MouseEventArgs)
return (e as MouseEventArgs).GetPosition(obj);
else if (e is TouchEventArgs)
return (e as TouchEventArgs).GetTouchPoint(obj).Position;
return new Point();
}
}
答案 1 :(得分:0)
如果e总是从InputEventArgs派生,那么只需使用该类型而不是泛型方法:
public static Point GetPosition(this InputEventArgs e, IInputElement obj)
{
// Code here
}
答案 2 :(得分:0)
MouseEventArgs
已有GetPosition方法。所以我认为只有TouchEventArgs
你可以扩展它:
public static Point GetPosition(this TouchEventArgs e, IInputElement relativeTo)
{
e.GetTouchPoint(obj).Position;
}