无法将InputEventArgs转换为MouseEventArgs

时间:2012-12-17 21:55:31

标签: c# casting extension-methods

我试图制作这种扩展方法。在演员表上收到错误说“无法将类型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();
        }
    }

3 个答案:

答案 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;
}