Meilleur auteur de réponses
Comment désactiver l'Appbar selon le contexte?

Question
-
Hello everybody!
J'ai développé quelques pages en C#/XAML (sur un ordinateur non tactile) et je souhaite désactiver/activer un Appbar d'une page.
Dans cette page, il y a plusieurs types de contenus différents (cela dépend du contexte et de la navigation) et l'Appbar doit être actif ou non selon le type du contenu.
J'ai pensé à utiliser la propriété Visibility
<AppBar Visibility="{Binding IsAppVisible,Converter={StaticResource BooleanToVisibilityConverter}}">
IsAppVisible est défini dans le code C# et cela marche bien mais il y a un bug: quand je navigue vers la page contenant l'Appbar et le type du contenu n'autorise pas l'Appbar:
- je clique droit (l'Appbar ne s'affiche pas: normal car IsAppVisible = false)
- puis je clique sur le bouton de retour: aucun effet (à mon avis, l'appbar se désactive)
- ensuite je clique une deuxième fois sur le bouton de retour: cela agit.
Vu les actions effectuées, je pense que l'Appbar s'active tout de même. Ce que j'essaie de faire, c'est de désactiver cet AppBar pour ce type du contenu et cliquer une seule fois sur le bouton de retour (au lieu de deux fois).
Comment faire?
Si jamais ce n'est pas clair ou manque de précision, n'hésitez pas à me le demander!
F2O
- Modifié F2O lundi 22 juillet 2013 12:57 Oubli d'une précision
Réponses
-
J'ai trouvé une solution!
J'ai ajouté un événement Opened dans AppBar:
Dans la pageA.xaml :
<AppBar x:Name="AppBar_Button" Opened="AppBar_Opened" Visibility="{Binding IsAppVisible,Converter={StaticResource BooleanToVisibilityConverter}}">
...
Puis dans la pageA.xaml.cs:
private void AppBar_Opened(object sender, object e) { var content = ViewModelLocator.CurrentInstance.PageAVm; if (content.IsAppVisible == false) { AppBar_Button.IsOpen = false; } else { AppBar_Button.IsOpen = true; } }
Dans la classe de la pageAVm, isAppVisible est un attribut. En gros, si l'Appbar est invisible, il reste fermé sinon il s'ouvre.
Avec cette solution, ça a l'air de marcher correctement.
En tout cas, merci beaucoup quand même pour l'aide que t'as apporté, Aurel!
- Modifié F2O jeudi 25 juillet 2013 08:34 recorrection
- Marqué comme réponse Aurel Bera jeudi 25 juillet 2013 08:50
Toutes les réponses
-
Bonjour
Essayez de utiliser l'évènement Closed et Opened du AppBar pour voir si il y a un changement de l'état du AppBar.
Je dirais que c'est plutôt un problème de navigation et pas un problème avec l’AppBar.
Cordialement,
- Modifié Aurel Bera mercredi 24 juillet 2013 07:17 corr2
-
-
J'ai fait la correction.
Merci
-
-
Dans ce cas je dirai que le probleme n'est pas de cote AppBar, mais Navigation.
Pouvez-vous nous montrer le code pour le boutton Back?
-
Voici le code:
public void GoBack(object sender, RoutedEventArgs e) { // Use the navigation frame to return to the previous page NavigationService.Instance.GoBack(); }
C'est la fonction par défaut et cela marche très bien.
Je ne crois pas que c'est lié au bouton Back: je veux dire que même si je clique ailleurs (sélection d'un élément par exemple), cela ne réagit pas la 1ère fois (car l'appbar, même si il est invisible, se désactive) et puis la 2ème fois, cela réagit..
-
Ça peut être un problème avec le Focus (Focus sur l'élément invisible).
Essayez de forcer le focus sur un élément du cette page au chargement au XAML
<Grid FocusManager.FocusedElement="{Binding ElementName=nom_element}">.
-
Il y a une chose que je ne comprend pas: FocusManager n'est pas connu....J'ai essayé de l'insérer dans le Grid de la page.
J'ai ajouté : System.Windows.Input dans le code (d'après les docs). Il n'est toujours pas connu.
Sinon, il y a GotFocus ou LostFocus. Cela peut bien remplacer FocusManager?
Cdt,
F2O
-
C'est
using Windows.UI.Xaml.Input;pour Windows Store Apps:
http://msdn.microsoft.com/fr-fr/library/windows/apps/windows.ui.xaml.input.focusmanager
- Modifié Aurel Bera mercredi 24 juillet 2013 12:18 lien
-
-
C'est un Projet Windows Store ou un Projet WPF Windows?
Je pense qu'il y a une petite confusion...
-
-
Essayons de faire un double GoBack
public void GoBack(object sender, RoutedEventArgs e)
{
// Use the navigation frame to return to the previous page
NavigationService.Instance.GoBack();NavigationService.Instance.GoBack();
}C’est anormale, mais j’espère qu’on vas nous donner plus de détails sur la cause de l’erreur.
-
-
Pour reprendre tout au plus clairement, d'après ce que j'ai compris, lors de l'insertion d'un AppBar dans une page, l'AppBar s'active (quand click droit sur la souris) même si il est invisible.
En gros,en mode invisible, l'AppBar agit comme si il est visible..
J'espère être claire...
Cdt,
F2O
-
C'est complètement anormal de se comporter comme visible (pourquoi avec 2 GoBack le comportement c’est normal ?).
Je soupçonne que c’est une autre chose sur la page.
Veuillez faire encore un teste et enlevez l’AppBar du cette page pour voir quel est le comportement.
Cordialement,
- Modifié Aurel Bera jeudi 25 juillet 2013 08:21 modif
-
-
J'ai trouvé une solution!
J'ai ajouté un événement Opened dans AppBar:
Dans la pageA.xaml :
<AppBar x:Name="AppBar_Button" Opened="AppBar_Opened" Visibility="{Binding IsAppVisible,Converter={StaticResource BooleanToVisibilityConverter}}">
...
Puis dans la pageA.xaml.cs:
private void AppBar_Opened(object sender, object e) { var content = ViewModelLocator.CurrentInstance.PageAVm; if (content.IsAppVisible == false) { AppBar_Button.IsOpen = false; } else { AppBar_Button.IsOpen = true; } }
Dans la classe de la pageAVm, isAppVisible est un attribut. En gros, si l'Appbar est invisible, il reste fermé sinon il s'ouvre.
Avec cette solution, ça a l'air de marcher correctement.
En tout cas, merci beaucoup quand même pour l'aide que t'as apporté, Aurel!
- Modifié F2O jeudi 25 juillet 2013 08:34 recorrection
- Marqué comme réponse Aurel Bera jeudi 25 juillet 2013 08:50
-
Merci aussi F2O
Ça ressemble à être un Bug.
Vous pouvez soumettre des bugs vers Microsoft avec l'option "Rapporter un bug".
Je veux marquer votre réponse.
Cordialement,