4

この拡張メソッドを作成しようとしています。キャストで「タイプ 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();
        }
    }
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

MouseEventArgs既にGetPositionメソッドを持っています。したがってTouchEventArgs、拡張したいのは次のとおりだと思います。

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

e が常に InputEventArgs から派生する場合は、ジェネリック メソッドの代わりにその型を使用します。

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