2017-06-26 2 views
0

J'ai un ComboBox comme suit:WPF ComboBox interrogeable

ComboBox IsEditable="True" 
       Width="200" 
       Height="25" 
       IsTextSearchEnabled="False" 
       x:Name="cb" 
       PreviewTextInput="Cb_OnPreviewTextInput" 
       ItemsSource="{Binding ItemList}" 
       Text="{Binding SearchTextText}"> 
     <ComboBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <VirtualizingStackPanel /> 
      </ItemsPanelTemplate> 
     </ComboBox.ItemsPanel> 
    </ComboBox> 

Quand Cb_OnPreviewTextInput est appelé, je mis IsDropdownOpen = true. Dans la première tentative (après avoir tapé la première lettre) le premier élément de la liste est sélectionné et je peux monter et descendre en utilisant les flèches pertinentes, le signe d'insertion est toujours dans le TextBox. Quand je continue à taper à ce moment-là, je ne suis plus capable de naviguer de haut en bas (1 élément à la fois), à ce moment-là, tout le ScrollViewer obtient le focus et je peux seulement aller en bas ou le haut, mais pas 1 par 1. Je dois fermer la popup par exemple en appuyant sur Échap, puis rouvrir en tapant 1 caractère pour pouvoir remonter/redescendre.

J'ai également remarqué que, après avoir appuyé sur PageUp, le premier élément est également sélectionné, alors j'ai essayé d'imiter cela dans le code, mais pas de chance.

Quelqu'un sait quoi faire ici pour pouvoir naviguer vers le haut/bas et taper sans problème?

+0

S'il vous plaît, corriger votre code (fermer tous les tags) et l'orthographe dans la description. Aussi, s'il vous plaît coller dans le corps Cb_OnPreviewTextInput. Est-ce que la collection ItemList de chaînes, je suppose? – Zozo

Répondre

0

Quand j'ai essayé de reproduire votre problème dans un environnement isolé, tout coutures pour être bien ...

enter image description here

Quelle version .NET utilisez-vous?

Je code utilisé comme ceci:

<Window x:Class="InterviewApplication.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="MainWindow" 
     Height="350" 
     Width="525" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <WrapPanel Orientation="Horizontal"> 
     <ComboBox IsEditable="True" 
        Width="200" 
        Height="25" 
        IsTextSearchEnabled="False" 
        x:Name="cb" 
        PreviewTextInput="Cb_OnPreviewTextInput" 
        ItemsSource="{Binding ItemList}" 
        Text="{Binding SearchTextText}"> 
      <ComboBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel /> 
       </ItemsPanelTemplate> 
      </ComboBox.ItemsPanel> 
     </ComboBox> 
    </WrapPanel> 
</Window> 

et le code semble derrière comme celui-ci

namespace Application 
{ 
    public partial class MainWindow : INotifyPropertyChanged 
    { 
     public MainWindow() 
     { 
      ItemList = new ObservableCollection<string>(); 
      for (var i = 0; i < 1000; i++) 
      { 
       ItemList.Add($"Item {i}"); 
      } 

      InitializeComponent(); 
     } 

     private void Cb_OnPreviewTextInput(object sender, TextCompositionEventArgs e) 
     { 
      cb.IsDropDownOpen = true; 
     } 

     public ObservableCollection<string> ItemList { get; set; } 

     public string SearchTextText 
     { 
      get => _searchTextText; 
      set 
      { 
       if (_searchTextText == value) return; 
       _searchTextText = value; 
       PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SearchTextText))); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 
+0

Il ne fait pas ce que j'ai décrit – LoPeZ