为什么在鼠标工作时拖动Xamarin滚动视图不起作用

时间:2016-04-10 21:38:41

标签: xamarin win-universal-app xamarin.forms

我有一个非常简单的Xamarin表单应用程序,其中包含一个scrollview,而inside是一个stacklayout。

在Windows上部署时,鼠标可以正常使用滚动条滚动滚动视图。但是,触摸/拖动根本不起作用以滚动相同的控件。我是否必须做一些特殊的事情才能启用触摸/拖动滚动?我认为这样可行。

我甚至不确定从何处开始进行故障排除。

我的目标是Windows 10.其他平台此时可选。

我所拥有的UI类的结构是:

ContentPage.Content = StackLayout1
StackLayout1.Children = { StackLayout2, Scrollview }
StackLayout2 contains an entry field and two buttons
ScrollView, which is the problem, contains another StackLayout
Inside that I have some labels and some grids

以下是简化的复制品。在我的(触控式)开发机器上运行Android模拟器,在触摸工作中滚动,在Windows 8.1模拟器中运行,滚动仅适用于鼠标,而不是触摸。

 public App() {

        StackLayout sl = new StackLayout();

        for (int i = 1; i < 20; i++) {
            sl.Children.Add( new Label { Text = "Label1", FontSize = 50, HeightRequest = 100 } );
        }

        ScrollView sv = new ScrollView { VerticalOptions = LayoutOptions.FillAndExpand };

        sv.Content = sl;

        ContentPage cp = new ContentPage();
        cp.Content = sv;

        MainPage = cp;


    }

Xamarin是否无法处理触控的Windows设备,如Surface或其他Windows平板电脑?或?

2 个答案:

答案 0 :(得分:1)

来自Activity的覆盖方法是:public boolean onTouchEvent(MotionEvent event)

这是解释整个屏幕中所有触摸事件的一般方法。

如您所知,每个View都有自己的onTouchEvent()方法,您可以实现这些方法以添加一些自定义实现。看来这些触摸事件从“内部”元素转到“外部” “元素。我的意思是亲子关系。

因此,在我们的情况下,当触摸事件为水平时,ScrollView会返回true。活动的触摸事件仅在ScrollView触摸事件未自行处理时处理,然后您就可以了。否则你必须覆盖并实现滚动视图的触摸事件,在某些情况下你必须返回false,以便整个布局实现它。

答案 1 :(得分:0)

解决方案是将我的VS 2015模板附带的Xamarin v2.0.0.6482更新为v2.1.0.6529。由于这个问题https://bugzilla.xamarin.com/show_bug.cgi?id=39721,更新有点痛苦。一旦我得到安装滚动开始工作没有其他更改。

在Windows上的旧版本中滚动已被破坏,在Xamarin论坛上由dev验证。