2010-02-25 2 views
1

J'ai un AutoCompleteBox qui doit envelopper les éléments filtrés avec d'autres contrôles, comme un lien vers un formulaire de recherche différent. J'ai besoin de la liste déroulante AutoCompleteBox pour montrer même lorsque la liste filtrée est vide.Comment continuer à afficher une liste de résultats vide et décorée avec AutoCompleteBox?

Actuellement, AutoCompleteBox force le popup à se fermer lorsque la liste d'éléments est filtrée à rien.

Comment conserver le menu contextuel ouvert avec une liste d'éléments vide?

Répondre

0

J'ai récemment rencontré ce problème lors de la migration d'une AutoCompleteBox héritée de SL2 vers SL3. Notez donc que ces exemples de code proviennent d'un contrôle personnalisé qui hérite directement de AutoCompleteBox.

D'abord, je déclarais une variable de niveau de classe pour maintenir la partie Popup du AutoCompleteBox:

private Popup dropdownPopup = null; 

Ensuite, redéfinissant la méthode OnApplyTemplate, vous pouvez saisir votre Popup du modèle par défaut AutoCompleteBox:

this.dropdownPopup = this.GetTemplateChild("Popup") as Popup; 

Maintenant, vous pouvez gérer l'événement KeyDown de l'AutoCompleteBox et afficher votre popup lorsque vous le souhaitez.

 protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e) 
     { 
      base.OnKeyDown(e); 
      this.dropdownPopup.IsOpen = true; 
     } 

Enfin, vous pourriez rencontrer des problèmes si la propriété Text du AutoCompleteBox est vide, j'ai trouvé le Popup ne veut toujours pas ouvrir dans ce cas. J'ai surmonté cela en plaçant simplement le texte dans un espace si je le voulais toujours ouvert.