2017-09-19 3 views
0

Je suis en train d'écrire une application xamarin.forms et je veux ouvrir la page 'paramètres spéciaux' quand j'appuie sur les boutons de volume haut et bas.xamarin.forms - écouteur d'événement pour les touches de volume haut et bas

Y at-il un moyen de le faire dans xamarin.forms?

Pour l'instant, j'ai fait un écouteur d'événement, qui fonctionne correctement. Maintenant, la dernière chose que je dois faire est de passer le contexte de liaison à la page des paramètres.

List<Keycode> _pressedKeys = new List<Keycode>(); 


     public override bool OnKeyDown(Keycode keyCode, KeyEvent e) 
     { 
      if(keyCode == Keycode.VolumeDown) 
      { 
       _pressedKeys.Add(keyCode); 
       CheckBoth(); 
       return true; 
      } 

      if (keyCode == Keycode.VolumeUp) 
      { 
       _pressedKeys.Add(keyCode); 
       CheckBoth(); 
       return true; 
      } 


      return base.OnKeyDown(keyCode, e); 
     } 

     public override bool OnKeyUp(Keycode keyCode, KeyEvent e) 
     { 
      if (keyCode == Keycode.VolumeDown) 
      { 
       _pressedKeys.Remove(keyCode); 

       return true; 
      } 

      if (keyCode == Keycode.VolumeUp) 
      { 
       _pressedKeys.Remove(keyCode); 


       return true; 
      } 

      return base.OnKeyUp(keyCode, e); 
     } 

     public void ChangePage() 
     { 
      ((App)App.Current).ChangeScreen(new SettingsPage()); 
     } 

     public void CheckBoth() 
     { 
      try 
      { 
       if (_pressedKeys.Contains(Keycode.VolumeDown) && 
        _pressedKeys.Contains(Keycode.VolumeUp)) 
       { 
        Console.WriteLine("It works!"); 
        ((App)App.Current).ChangeScreen(new SettingsPage()); 
        _pressedKeys.Clear(); 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e); 
      } 
     } 

Résolu. J'ai ajouté la ligne suivante:

var vm= App.Current.MainPage.BindingContext as MainViewModel; 
+0

ce que vous avez jusqu'à présent? Montrez votre effort? – timiTao

+0

J'ai ajouté à ma méthode MainActivity.cs 'OnKeyUp', que Barney Chambers a suggéré. Maintenant, je suis à la recherche de google pour trouver comment changer de page. –

+0

S'il vous plaît, mettez à jour votre question avec de nouvelles informations. Votre code devrait être utile aussi. – timiTao

Répondre

0

Je pense que vous pourriez avoir à aller plate-forme spécifique avec cette mise en œuvre, mais voici la mise en œuvre Android pour le traitement appuie sur un bouton de volume:

public override bool OnKeyUp(Keycode keyCode, KeyEvent e) 
{ 
    if (keyCode == Keycode.VolumeDown) 
    { 
     //Dostuff(); 

     return true; 
    } 

    if (keyCode == Keycode.VolumeUp) 
    { 
     //Dostuff(); 

     return true; 
    } 
    return base.OnKeyUp(keyCode, e); 
} 
+0

ok.J'ai ajouté votre code à l'activité principale .android. Et bonne chose, c'est la détection des clics. Mais maintenant .. Comment changer la page maintenant? –

+0

@GrzegorzG. Utilisez le service de dépendance pour l'écouteur de touche de volume et utilisez un événement/délégué dans votre interface pcl, en vous abonnant à ce qui, vous pouvez naviguer à travers les pages –

+0

J'ai mis à jour une question. Pourriez-vous jeter un coup d'œil? –