2009-09-21 6 views
17

J'ai écrit un simple programme MSN qui enverra et récupérera des messages en utilisant WCF. Le formulaire principal contient une zone de texte pour taper le message à envoyer. En arrière-plan, l'application interroge le serveur toutes les quelques secondes pour les nouveaux messages. Lorsqu'un nouveau message est reçu, une nouvelle fenêtre est ouverte pour l'afficher. Cela doit être fait sur le thread UI en utilisant la classe Dispatcher.Comment empêcher un nouveau formulaire WPF de dérober le focus?

Le problème est que lorsque la nouvelle fenêtre est affichée, le focus se décale de la zone de texte, de sorte que la frappe est interrompue. C'est très agaçant! En MSN Messenger, il est possible de continuer à taper votre propre message tout en en recevant un. Comment est-il fait? Pour contourner le problème, je remets le popup avec le nouveau message alors que le TextBox a le focus, mais il devrait y avoir une meilleure solution!

+1

Est-il possible d'ouvrir une nouvelle fenêtre, sans qu'il soit concentré? –

Répondre

46

La réponse est simple: Depuis les formulaires WPF .NET 3.5 SP1 ont une propriété ShowActivated. Réglez ceci sur false et toute forme ainsi marquée ne vous dérobera plus!

+8

Un formulaire WPF? Qu'est-ce que c'est? –

-2

Vous pouvez définir la propriété Focusable de la fenêtre sur false.

+1

Pas dans ce cas. L'utilisateur doit être en mesure d'interagir avec le formulaire – Dabblernl

-1

Dans mon application, j'ai besoin d'afficher une fenêtre de notification au-dessus de toutes les autres fenêtres pendant que ma MainWindow est réduite, mais sans voler le focus.

Je fais ceci:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Topmost = true; 
    this.Topmost = false; 
} 
+1

Étant donné que l'événement chargé se déclenche après que la fenêtre est déjà activée et affichée, cela ne s'arrête pas si vous dérobez le focus. – Wobbles

Questions connexes