2010-09-21 19 views
0

J'ai un problème concernant la liste déroulante WPF lors de l'utilisation du sélecteur de modèle de données. Fondamentalement, WPF combobox a un comportement standard qui vous amènera directement à l'élément qui commence à partir d'un caractère si vous tapez ce caractère en utilisant le clavier. Je ne connais pas le nom officiel de cette fonctionnalité et je l'appellerai temporairement "Key Indexing".L'index de clé WPF ComboBox ne fonctionne pas lorsque vous utilisez le sélecteur de modèle de données

Je veux maintenant créer un ComboBox qui affiche son élément différemment. J'ai réalisé cela en utilisant DataTemplateSelector;

<ComboBox SelectedItem="{Binding Selection}" x:Name="Input" ItemsSource="{Binding Parties}"> 
     <ComboBox.ItemTemplateSelector> 
      <Editor:PartyTemplateSelector DefaultTemplate="{StaticResource Default}" NewTemplate="{StaticResource New}" OldTemplate="{StaticResource Old}"/> 
     </ComboBox.ItemTemplateSelector> 
    </ComboBox> 

Et le PartyTemplateSelector est:

public class PartyTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate DefaultTemplate 
    { 
     get; set; 
    } 

    public DataTemplate NewTemplate 
    { 
     get; set; 
    } 

    public DataTemplate OldTemplate 
    { 
     get; set; 
    } 

    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     var party = (Party) item; 
     if (party is OldDisplay) 
     { 
      return OldTemplate;     
     } 

     if(counterparty.NewLook) 
     { 
      return NewTemplate; 
     } 
     return DefaultTemplate; 
    } 
} 

Il fonctionne très bien en dehors de la clé que la capacité d'indexation est perdue. Lorsque je tape une clé pendant que la liste déroulante est déroulée, cela ne m'amène pas à l'élément qui commence à partir du caractère que j'ai tapé.

Quelqu'un peut-il m'aider avec ceci?

Cordialement.

Répondre

0

Essayez <TextSearch.TextPath="prop" /> où « prop » doit être le chemin de la propriété que vous souhaitez examiner pour les matchs contre les pressions sur les touches. Edit: bien sûr, vous pouvez l'utiliser directement à l'intérieur de la balise ComboBox et non séparément.