Je souhaite afficher une sélection dans une zone de texte WPF même si elle n'est pas au point. Comment puis-je faire ceci?Comment conserver la sélection de la zone de texte WPF lorsqu'elle n'est pas focalisée?
Répondre
J'ai utilisé cette solution pour un RichTextBox, mais je suppose qu'il fonctionnera également pour une zone de texte standard. Fondamentalement, vous devez gérer l'événement LostFocus et le marquer comme manipulé. Le TextBox ne réalisera pas qu'il a perdu le focus et affichera toujours la sélection en surbrillance.
Je n'utilise pas de liaison de données dans ce cas, il est donc possible que cela perturbe la liaison bidirectionnelle. Vous devrez peut-être forcer la liaison dans votre gestionnaire d'événements LostFocus. Quelque chose comme ceci:
Binding binding = BindingOperations.GetBinding(this, TextProperty);
if (binding.UpdateSourceTrigger == UpdateSourceTrigger.Default ||
binding.UpdateSourceTrigger == UpdateSourceTrigger.LostFocus)
{
BindingOperations.GetBindingExpression(this, TextProperty).UpdateSource();
}
Une autre option est de définir un champ de mise au point séparée en XAML pour maintenir la sélection dans la première zone de texte.
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Text="Text that does not loose selection."/>
<StackPanel Grid.Row="1" FocusManager.IsFocusScope="True">
<TextBox Text="Some more text here." />
<Button Content="Run" />
<Button Content="Review" />
</StackPanel>
</Grid>
public class CustomRichTextBox : RichTextBox
{
protected override void OnLostFocus(RoutedEventArgs e)
{
}
}
J'ai trouvé que les suggestions énumérées (ajouter un gestionnaire de LostFocus, la définition d'un FocusScope) de ne pas travailler, mais je suis venu à travers le code indiqué ici: http://naracea.com/2011/06/26/selection-highlight-and-focus-on-wpf-textbox/, ce qui crée un Adorner personnalisé qui met en évidence la texte lorsqu'il n'est pas ciblé.
Cela a fonctionné! Merci! –
+1 Belle solution - m'a aidé à créer une fonction de recherche ... Thx – reSPAWNed
Cela fonctionne principalement, mais ne fonctionne pas avec les sélections RichTextBox non ciblées - la sélection ne bouge pas avec le texte. – Cameron