Interdire / Bloquer la sélection de l'élément combobox désactivé dans wpf
Je suis en train d'écrire une application dans laquelle je voudrais désactiver quelques éléments dans le ComboBox
et qui veulent aussi interdire/sélection du bloc d'éléments désactivés. Veuillez noter zone de liste déroulante dans la fenêtre principale a une autre zone de liste déroulante comme Élément ComboBox init (qui est décidé au moment de l'exécution par les données de sélecteur de modèle).
Avec le code ci-dessous je suis en mesure de désactiver une zone de liste déroulante dans la ComboBox, mais il ne serait pas arrêter de l'utilisateur de la sélection des personnes handicapées de l'élément ComboBox. Toute aide à interdire/sélection du bloc d'éléments désactivés serait utile.
Ci-dessous les extraits de code
Zone de liste déroulante dans la fenêtre principale:
<Grid>
<ComboBox HorizontalAlignment="Left" VerticalAlignment="Top"
Width="120" Margin="87.2,44.8,0,0"
ItemsSource="{Binding Cars}"
ItemsPanel="{DynamicResource ItemsPanelTemplateHorizontal}"
ItemTemplateSelector="{StaticResource QualityComboBoxTemplateSelector}"
SelectedItem="{Binding SelectedItm}"/>
</Grid>
Données de sélecteur de modèle:
public class QualityComboBoxTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var element = container as FrameworkElement;
var dataTemplate = element.FindResource(((item is string) && item.Equals("Ferrari")) ?
"DataTemplateTopLevelCombobox2" : "DataTemplateTopLevelCombobox1") as DataTemplate;
return dataTemplate;
}
}
Des modèles de données-dessus de la zone de liste déroulante:
<DataTemplate x:Key="DataTemplateTopLevelCombobox1">
<Border BorderBrush="Black" BorderThickness="1" >
<TextBlock HorizontalAlignment="Left"
TextWrapping="Wrap" Text="{Binding}"
VerticalAlignment="Top"/>
</Border>
</DataTemplate>
<DataTemplate x:Key="DataTemplateTopLevelCombobox2">
<Border Width="100">
<ComboBox Text="Custom" Height="21.96"
ItemsSource="{Binding DataContext.Models, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
IsEnabled="{Binding DataContext.EnableCombo, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
</Border>
</DataTemplate>
source d'informationauteur vmore
Vous devez vous connecter pour publier un commentaire.
Vous pouvez atteindre cet objectif par la mise en
IsEnabled
propriété d'unComboBoxItem
àfalse
;De sorte que chaque élément de zone de liste déroulante du
ItemSource
(c'est à direCars
dans votre cas) peut être un objet ayant une certaine propriété (direIsSelectable
) en précisant si elle doit être activée ou désactivée et à utiliser avec un style à faire un article non sélectionnable. quelque chose comme cela -Mise à jour:
Pour résoudre le problème signalé par @JordyBoom.
ItemsContainerGenerator
ne pas générer des éléments jusqu'à ce que déroulante est ouverte au moins une fois.Donc, si vous ouvrez le menu déroulant et fermez-le à nouveau dans la fenêtre du gestionnaire d'événements loaded, puis tous censés fonctionner correctement avec la souris ainsi que le clavier de sélection.
source: WPF: Prise combo éléments handicapés – aussi lors de l'accès à l'aide du clavier