4

我正在尝试制作这种扩展方法。在演员表上出现“无法将类型 T 转换为 MouseEventArgs”的错误。我不应该能够向上转换对象(因为MouseEventArgs : InputEventArgs)?

如果您好奇,我将使用它在处理程序方法中使用基本 InputEventArgs 在鼠标和触摸事件之间共享事件处理程序。

    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();
        }
    }
4

3 回答 3

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();
        }
    }
于 2012-12-17T22:06:55.317 回答
0

如果 e 总是从 InputEventArgs 派生,那么只需使用该类型而不是泛型方法:

public static Point GetPosition(this InputEventArgs e, IInputElement obj)
{
    // Code here   
}
于 2012-12-17T22:04:09.447 回答
0

MouseEventArgs已经有GetPosition方法。所以我认为它只是TouchEventArgs你可能想要扩展的:

public static Point GetPosition(this TouchEventArgs e, IInputElement relativeTo)
{
    e.GetTouchPoint(obj).Position;
}
于 2012-12-17T22:25:19.070 回答