WPF Maintenir le Focus du Clavier
Je suis de la création d'un UserControl
composé d'un TextBox
et un ListView
. Je veux le focus du clavier pour rester avec le TextBox
aussi longtemps que le contrôle a le focus du clavier (changements de la sélection dans le ListView
ne devrait pas supprimer le focus du clavier de l' TextBox
).
J'ai essayé d'attraper GotKeyboardFocus
dans le ListView
et passer le focus du clavier retour à la TextBox
à l'aide de Keyboard.Focus(),
mais ce qui semble annuler toute opération de sélection dans le ListView
. Le code ci-dessous montre le problème. Quelqu'un sait-il comment obtenir cette fonctionnalité?
<Window x:Class="WpfApplication5.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<TextBox x:Name="TextBox1" />
<ListView x:Name="ListBox1" Keyboard.GotKeyboardFocus="ListBox1_GotKeyboardFocus">
<ListViewItem Content="Able" />
<ListViewItem Content="Baker" />
<ListViewItem Content="Charlie" />
</ListView>
</StackPanel>
</Window>
using System.Windows;
using System.Windows.Input;
namespace WpfApplication5
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void ListBox1_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
Keyboard.Focus(TextBox1);
}
}
}
OriginalL'auteur Joseph Sturtevant | 2009-02-04
Vous devez vous connecter pour publier un commentaire.
Il semble qu'il est possible de changer d'orientation dans l'événement MouseUp. Je pense que si vous le faites trop tôt, comme dans le GotKeyboardFocus de l'événement, vous aurez voler la mise au point avant la listview peut gérer l'événement et sélectionnez l'élément choisi.
OriginalL'auteur Bubblewrap
Au lieu de cela, avez-vous envisagé de simplement capturer les frappes de touches et de mettre ces touches dans votre zone de texte?
Puis dans la fenêtre de votre code-behind:
Vous aurez à faire un travail supplémentaire pour quelque chose comme des caractères spéciaux (retour, etc), et évidemment l'un des Principaux gestionnaire pour votre "Entrée" ou "Post" opération, mais il vous donne la possibilité de libre-type de formulaire alors que la Fenêtre a le focus et de traiter correctement la séquence de touches que nécessaire.
OriginalL'auteur Adrian
Si vous appelez votre fenêtre WPF à partir d'un WinForm vous devez utiliser ce:
de la La documentation MSDN.
C'est comment j'ai résolu mon problème de clavier.
IceX
OriginalL'auteur IceX
C'est un hack, mais si au lieu de l'écoute de la GotKeyboardFocus cas, vous écoutez l'événement SelectionChanged sur la liste?
OriginalL'auteur Szymon Rozga
Mettre Focusable=false sur votre Liste.
OriginalL'auteur
Ok, c'était, me rend fou. Même si vous définissez le focus à
UserControl
à chaque fois perdu le focus, encore ne pouvais pas obtenir ma commande les touches de raccourci pour le travail. Tout ce que j'avais à faire était de définir la propriétéFocusable
àtrue
, et voilà, ça fonctionne!OriginalL'auteur mike a