2010-06-24 8 views
16

J'ai un contrôle utilisateur chargé dans un canevas; Ce contrôle utilisateur par défaut a une visibilité réduite. Quand une zone de texte spécifique de ma fenêtre est mise au point, la commande usercontrol devient visible.Mise au point sur TextBox lorsque UserControl change Visibilité

Lorsque la commande usercontrol est visible, je veux définir le focus sur une autre zone de texte dans usercontrol.

J'essaie de le faire:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
     if (this.Visibility == Visibility.Visible) 
     {     
      FocusManager.SetFocusedElement(this, TextBlockInput); 
     } 
} 

Il semble travail, mais il y a un problème: la zone de texte semble concentré, mais le curseur en zone de texte ne clignote pas et je ne peux pas saisir les caractères pour la saisie.

Je voudrais qu'après la mise au point, la zone de texte soit prête pour l'entrée. Comment puis-je faire?

Répondre

31

Eh bien, je résous ainsi:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    if (this.Visibility == Visibility.Visible) 
    { 
     this.Dispatcher.BeginInvoke((Action)delegate 
     { 
      Keyboard.Focus(TextBlockInput); 
     }, DispatcherPriority.Render); 
    } 
} 

Je pense que le problème était tha appel de mise au point en cas IsVisibleChanged « portée "...droite?

+0

Essayait de résoudre ce problème depuis ce matin .... vous avez sauvé ma soirée :-) Merci beaucoup! ! – Cris

1

essayer

Keyboard.Focus(TextBlockInput); 

voir here pour plus de détails

+0

J'ai essayé mais pire ... avec Keyboard.Focus (myTextBox) ou myTextBox.Focus() semble que la zone de texte n'est pas mise au point ... ne voit pas le curseur. –

+0

est-ce un TextBox standard? ou un contrôle de tiers? –

+0

J'ai posté ma solution ... merci pour l'aide, semble que le problème était l'appel de focus dans l'événement IsVisibleChange –

0

Une autre solution de contournement possible est au lieu de Visibility utilisation de la propriété Opacity. Dans ce cas, l'appel Focus() définit en fait le focus.