2009-11-04 6 views
1

Je rencontre un comportement étrange par le ComboBox Silverlight. J'ai commencé avec un code simple:SelectionChanged non déclenché lors de l'utilisation de ItemTemplate dans Silverlight 3 ComboBox

XAML:

<ComboBox Name="drpInstallation" SelectionChanged="drpInstallation_SelectionChanged" /> 

cs:

List<string> installations = new List<string>(); 
installations.Add("Testing 123"); 
installations.Add("Antoher test"); 
installations.Add("Yeah"); 
drpInstallation.ItemsSource = installations; 

Tout fonctionne bien en cliquant sur un élément. Cependant, si j'utilise ItemTemplate dans ComboBox comme ceci:

XAML:

<ComboBox Name="drpInstallation" SelectionChanged="drpInstallation_SelectionChanged"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ComboBoxItem Content="{Binding Installation}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

cs:

ICollection<InstallationClass> installations = a list of the installation class; 
drpInstallation.ItemsSource = installations; 

InstallationClass.cs:

Maintenant, les ComboBox affiche correctement
public class InstallationClass 
{ 
    public int PK; 
    public string Installation; 
} 

, Cependant, quand je clique sur le texte si les éléments Rien ne se passe. Si je clique juste à droite du texte, l'élément est sélectionné comme d'habitude. Le point est; la chose naturelle à faire est de cliquer sur le texte lui-même, pas à gauche ou à droite de celui-ci. Une idée de pourquoi cela arrive, et une idée de comment le corriger? Est-ce un bug Silverlight?

Répondre

1

Votre DataTemplate devrait ressembler à ceci:

<ComboBox Name="drpInstallation" SelectionChanged="drpInstallation_SelectionChanged"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Installation}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Le problème était que ComboBoxItems consomment l'événement click, plutôt que barbotage vers le haut.

+0

J'ai réécrit le code pour contourner ce problème, mais je vais définir ceci comme la solution acceptée car elle semble assez logique;) –