C# Xamarin先生手势移动内容视图

C# Xamarin先生手势移动内容视图,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我有个问题。我正在尝试使用MR.手势移动我的ContentView,因此我尝试了以下方法: var draggableView = new MR.Gestures.ContentView { VerticalOptions = LayoutOptions.FillAndExpand }; draggableView.Panning += (dd, ee) => { if(ee.Touches != null) { if (ee.Touches.Leng

我有个问题。我正在尝试使用MR.手势移动我的ContentView,因此我尝试了以下方法:

var draggableView = new MR.Gestures.ContentView { VerticalOptions = 

LayoutOptions.FillAndExpand };
draggableView.Panning += (dd, ee) => 
{
    if(ee.Touches != null)
    {
        if (ee.Touches.Length == 1)
        {
            draggableView.TranslationX = ee.Touches[0].X;
            draggableView.TranslationY = ee.Touches[0].Y;
        }
    }
};
但这根本不会移动ContentView。需要翻译的两行永远无法到达,因此
ee.touchs
始终为
null

我做错了什么


这是我使用它的唯一代码

也许您忘记了将
contentview
设置为Content。为了更好的表现,我设置了背景色

您还需要更改
TranslationX
TranslationY
的值。这将使内容移动顺畅

更改:

                    draggableView.TranslationX = ee.Touches[0].X;
                    draggableView.TranslationY = ee.Touches[0].Y;
                    draggableView.TranslationX += ee.DeltaDistance.X;
                    draggableView.TranslationY += ee.DeltaDistance.Y;
至:

                    draggableView.TranslationX = ee.Touches[0].X;
                    draggableView.TranslationY = ee.Touches[0].Y;
                    draggableView.TranslationX += ee.DeltaDistance.X;
                    draggableView.TranslationY += ee.DeltaDistance.Y;
您可以尝试下面的代码

var draggableView = new MR.Gestures.ContentView
        {
            VerticalOptions = LayoutOptions.FillAndExpand,
            BackgroundColor = Color.Accent
        };

       Content = draggableView;

        draggableView.Panning += (dd, ee) =>
        {
            if (ee.Touches != null)
            {
                if (ee.Touches.Length == 1)
                {
                    //draggableView.TranslationX = ee.Touches[0].X;
                    //draggableView.TranslationY = ee.Touches[0].Y;
                    draggableView.TranslationX += ee.DeltaDistance.X;
                    draggableView.TranslationY += ee.DeltaDistance.Y;
                }
            }
        };
结果:

                    draggableView.TranslationX = ee.Touches[0].X;
                    draggableView.TranslationY = ee.Touches[0].Y;
                    draggableView.TranslationX += ee.DeltaDistance.X;
                    draggableView.TranslationY += ee.DeltaDistance.Y;

您假设e.touch不是空的是的,因为如果您正在计划,事件会被触发,这意味着必须至少有一次触摸?我不知道。但是在访问对象属性之前,您应该始终测试null。您可以共享其余代码吗?你确定你用对了吗?这是我使用它的唯一代码