如何在Xamarin.Forms的主页上而不是其他页面上禁用Home Tap手势?

时间:2019-05-08 04:34:18

标签: c# xamarin xamarin.forms uitapgesturerecognizer

Xamarin.Forms实现。

我在所有页面上都有主页按钮,并已在一个文件中实现它,并在所有页面上呈现它。

现在,我的要求是,如果用户位于主页上,并且如果他单击主页图标,则什么也不会发生,即不应通过轻拂页面导航到主页(这是当前的实现)。

我尝试了逻辑上的其他问题,但可能并非如此。 (即)

if
{
  //user on home page. Do nothing. 
}
else
{
  //navigate to Home.
}

这是我用点击手势命令显示的图片

<Image Grid.Row="0" Grid.Column="0" Source="OneD_Icon_Small.png" HorizontalOptions="StartAndExpand" Margin="5,5,0,0">
    <Image.GestureRecognizers>
        <TapGestureRecognizer Command="{Binding HomeCommand}" NumberOfTapsRequired="1" />
    </Image.GestureRecognizers>
</Image>

1 个答案:

答案 0 :(得分:0)

  

在每个contentPage.xaml

设置contentPage的名称并将其作为CommandParameter的参数传递

例如在MainPage中

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:App12"
             x:Name="myPage"
             x:Class="App12.MainPage">
    <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" >

        <Image Source="OneD_Icon_Small.png" HorizontalOptions="StartAndExpand" Margin="5,5,0,0">
            <Image.GestureRecognizers>
                <TapGestureRecognizer Command="{Binding HomeCommand}"  CommandParameter="{Binding .,Source={x:Reference myPage}}" NumberOfTapsRequired="1" />
            </Image.GestureRecognizers>
        </Image>
    </StackLayout>

</ContentPage>

在ViewModel中

public class TapViewModel : INotifyPropertyChanged
 {        
   ICommand homeCommand;
   public TapViewModel()
   {
      // configure the TapCommand with a method
      homeCommand = new Command(OnTapped);
   }
   public ICommand HomeCommand
   {
     get { return homeCommand; }
   }

   public event PropertyChangedEventHandler PropertyChanged;

   void OnTapped(object s)
   {
     var page = s as ContentPage;

     if (page.GetType() == typeof(MainPage))
     {
        //user on home page. Do nothing.
     }

     else
     {
        //navigate to Home.
     }

    }

}

注意:对象s是contentPage,您可以执行所需的操作。