Impossible de saisir du texte dans le contrôle TextBox dans Flyout

Je veux utiliser le CommandBar et un Flyout pour construire quelque chose comme ça.

flyout de recherche

L’utilisateur doit cliquer sur le bouton dans la Flyout CommandBar (le Flyout s’ouvre), puis saisir du texte dans la zone de texte, puis cliquer sur le bouton situé à droite de la zone de TextBox pour lancer la recherche. Le problème est que, lorsque je clique sur la zone de texte, je ne peux pas saisir de texte. Il semble qu’il perd le focus avant que je puisse écrire quelque chose. Voici l’exemple de code. Qu’est-ce qui ne va pas?

                        

Définissez la propriété AllowFocusOnInteraction sur true sur AppBarButton .

Solution en XAML (pour Windows 10, version 1607)

         

ou si vous ciblez la mise à jour Windows 10 Anniversary (1607) de la version 14393 ou ultérieure, mais que la version Windows 10 minimale de l’application est inférieure , vous devez vérifier si la propriété AllowFocusOnInteraction est disponible sur la plate-forme.

Vous ne pouvez donc pas définir la propriété AllowFocusOnInteraction en XAML. Au lieu de cela, faites-le dans code-behind:

Solution en C # code-behind

 if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent("Windows.UI.Xaml.FrameworkElement", "AllowFocusOnInteraction")) myAppBarButton.AllowFocusOnInteraction = true; 

Vous pouvez également l’envelopper dans une propriété attachée pouvant être utilisée dans XAML, même sur toutes les versions de Windows 10.

Plus d’informations

Vous rencontrez une nouvelle fonctionnalité dans la mise à jour Windows 10 Anniversary (1607), construite 14393.

Il s’agit d’une amélioration pour la plupart des applications de la barre d’application, mais elle interfère avec la vôtre. Vous devez donc remplacer la valeur par défaut lorsque vous modifiez votre version plutôt en 14393 au lieu de 10586.

Voici un article de blog ComboBox sur un Flyout associé à un AppBarButton qui perd la saisie de la souris sur 1607 . Il contient également l’implémentation de la propriété attachée.

votre TextBox ne fait en réalité jamais l’object d’une mise au point. En aucun cas son déplacement l’empêche, la seule action que je puisse obtenir à partir de cette zone de texte est l’état PointerOver – qui lui donne l’air d’être mise au point, mais ce n’est pas le cas.

Vous devez définir le focus dans le code, par exemple lorsque le menu déroulant s’ouvre – cela fonctionne, mais ce n’est peut-être pas la solution la plus intéressante, car vous devez nommer la Zone de texte pour pouvoir l’obtenir à partir du code précédent.

                   

et ensuite code derrière:

 private void FlyoutBase_OnOpened(object sender, object e) { Test.Focus(FocusState.Programmatic); } 

Je peux reproduire le problème. Je pense que c’est un bogue de la mise à jour d’anniversaire (1607) SDK (14393), car si je rétrograde le SDK cible à 10586, tout fonctionne normalement.

ps .: je ne sais pas comment signaler ce bogue à Microsoft.