2017-01-11 1 views
2

J'ai une application uwp fonctionnant sur un appareil de poche exécutant Windows 10. L'appareil de poche a un lecteur de codes à barres et toutes les entrées pour l'application est faite en utilisant cela. Donc, je veux empêcher le clavier d'apparaître lorsqu'un utilisateur déplace le focus sur l'un des contrôles de la zone de texte.Désactiver le clavier logiciel dans l'application uwp pour Windows

Dans une large mesure, la mise au point est gérée par programme - et j'ai empêché le clavier d'apparaître dans ces instances avec PreventKeyboardDisplayOnProgrammaticFocus=True. Mais l'utilisateur doit parfois déplacer le focus lui-même et je ne trouve aucun moyen d'empêcher le clavier de se lever lorsqu'il le fait.

J'ai trouvé des articles concernant le focus programmatique mentionné ci-dessus et cachant le clavier lorsque l'utilisateur appuie sur enter dans une zone de texte - et définissant la valeur readonly sur true pour le contrôle. Mais ceux-ci ne sont pas applicables dans ce cas. Je veux être en mesure d'empêcher cela à venir dans cette application. Quelqu'un peut-il conseiller?

Répondre

4

Je ne suis pas sûr s'il existe un moyen direct d'empêcher l'affichage du clavier. Vous pouvez certainement cacher le clavier une fois qu'il montre, en vous inscrivant à événements InputPane:

InputPane.GetForCurrentView().Showing += (s, e) => (s as InputPane).TryHide(); 

Mais cela ne semble pas agréable. Par conséquent j'ai essayé une manière compliquée d'accomplir ce que vous voulez - désactivez le TextBox pour le test de coup et employez le contrôle factice sous lui pour placer le foyer programmatique. Comme j'ai testé cela devrait fonctionner. L'exemple XAML:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Border Tapped="Border_Tapped" Background="Transparent"> 
     <TextBox x:Name="myTextBox" Width="200" Height="100" Header="Enter:" PreventKeyboardDisplayOnProgrammaticFocus="True" IsHitTestVisible="False"/> 
    </Border> 
    <Button Margin="20" Content="Dummy to test focus"/> 
</StackPanel> 

Et le code derrière:

private void Border_Tapped(object sender, TappedRoutedEventArgs e) 
{ 
    myTextBox.Focus(FocusState.Programmatic); 
} 
+0

Merci. Désolé de vous être si longtemps - était sur un autre projet. Cela fonctionne bien - et n'a pas besoin du bouton, car frapper la frontière fait l'affaire. – JaneP