Как отключить жест касания «Домой» на домашней странице, но не на других страницах в Xamarin.Forms? - PullRequest
0 голосов
/ 08 мая 2019

Реализация 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 голосов
/ 08 мая 2019

в каждом 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.
     }

    }

}

Примечание: object s - это contentPage, и вы можете делать что угодно.

...