J'utilise une combinaison modifiable dans WPF, mais lorsque j'essaie de définir la mise au point du code C #, il ne fait que montrer la sélection. Mais je veux aller pour l'option Modifier (le curseur doit afficher pour la saisie de l'utilisateur). P>
4 Réponses :
Vous pouvez essayer de dériver de comboBox et accéder à la zone de texte interne, comme ceci: dans votre code, vous l'utiliseriez comme ceci: P> <Window x:Class="EditableCbox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EditableCbox"
Title="Window1" Height="300" Width="300">
...
<local:MyComboBox x:Name="myComboBox" IsEditable="True" Grid.Row="0" Margin="4">
<ComboBoxItem>Alpha</ComboBoxItem>
<ComboBoxItem>Beta</ComboBoxItem>
<ComboBoxItem>Gamma</ComboBoxItem>
</local:MyComboBox>
...
</Window>
Vous pouvez essayer ce code:
var textBox = (comboBox.Template.FindName("PART_EditableTextBox", comboBox) as TextBox); if (textBox != null) { textBox.Focus(); textBox.SelectionStart = textBox.Text.Length; }
@Rajk que le code a fonctionné parfaitement pour moi. Il résout correctement le problème de l'accent sur une combinaison modifiable lorsqu'une fenêtre est d'abord affichée. Ce qui n'est pas indiqué clairement, c'est que vous devez mettre le code dans l'événement chargé de la fenêtre contenant la combinaison modifiable.
Parfait! Résolu des lots et beaucoup de problèmes! Merci beaucoup!
Basé sur la réponse de l'utilisateur128300 ci-dessus, j'ai proposé une solution légèrement plus simple. Dans le constructeur ou contextchangedHandler, le code attend que la commande soit chargée avant de mettre l'accent sur l'élément UI puis dans la mise au point même du gestionnaire, je sélectionne tout le texte du début à la fin p> dans xaml the ComboBox est modifiable. En sélectionnant tout le texte lorsque le type d'utilisateur Tapez une clé de réinitialisation de la valeur précédente p>
Basé sur la réponse de Rikker Serg, vous pouvez utiliser ce code dans votre constructeur (après initializecomonent) et l'envoyer au lieu de ne pas avoir besoin de créer des contrôles personnalisés ou des gestionnaires d'événements.
public NewMessageWindow() { InitializeComponent(); Dispatcher.BeginInvoke(new Action(() => { var textBox = myComboBox.Template.FindName("PART_EditableTextBox", cbUsers) as TextBox; if (textBox != null) { textBox.Focus(); textBox.SelectionStart = textBox.Text.Length; } })); }
Pourrait donner un exemple de votre code? PS: Je ne t'ai pas répondu.