View 为Droid在Mono中将侦听器附加到视图

View 为Droid在Mono中将侦听器附加到视图,view,mono,listener,xamarin.android,View,Mono,Listener,Xamarin.android,希望有人能帮忙 我正在尝试将OnTouchListener()附加到视图及其子级。在本机android中,这将使用setOnTouchListener()方法 这似乎建议在c#中使用委托。但这似乎不起作用。任何人都可以提供一个关于将ontouch侦听器附加到视图及其子视图的基本演示 下面是我尝试过的代码 myView.Touch += (sender,e)=> { // Code to be executed } 及 然而,你的样品对我有用;在an

希望有人能帮忙

我正在尝试将OnTouchListener()附加到视图及其子级。在本机android中,这将使用setOnTouchListener()方法

这似乎建议在c#中使用委托。但这似乎不起作用。任何人都可以提供一个关于将ontouch侦听器附加到视图及其子视图的基本演示

下面是我尝试过的代码

    myView.Touch += (sender,e)=>
    {
        // Code to be executed
    }


然而,你的样品对我有用;在android中,如果子视图处理触摸事件,则您的父视图不会处理。因此,通过注册如上所述的触摸事件,如果您触摸任何子控件,则不会发生任何事情,因为该子控件正在处理该事件,请参阅。我认为有三种方法可以解决这个问题:

  • 为父级和所有子级注册代理(但这似乎是您要避免的…)
  • 在父视图类中,实现onInterceptTouchEvent,这意味着您需要一个自定义视图类
  • SetOnTouchListener仍然存在于M4A中,您可以在父级和所有子级上使用它,效果与选项1相同

  • 我实际上使用的是一个自定义类,它扩展了线性布局,我不认为这会导致它不工作?另外,根据您的解释,如果我的视图处理onclick事件,那么所有子级(其中没有一个自己处理)都将使用相同的事件,对吗?不,这不会导致它不起作用,如果您将它们全部注册到该委托/方法,则您的子级可以使用相同的委托。如果您希望您的孩子处理触摸事件,则他们必须注册触摸事件,并且他们必须调用父级的代理,因为在子级处理触摸事件时,您的父级将不会这样做。这就是android的工作原理,而不是M4A的副作用
        myView.Click += (sender,e)=>
        {
           // Code to be executed
        }