Est-il possible de définir le nombre maximal d'éléments déroulants plutôt que la hauteur de liste déroulante maximale dans WPF? Merci! -KevinWPF ComboBox MaxDropDownItems
Répondre
Il n'y a pas de moyen direct d'afficher X nombre d'éléments. Vous devez utiliser la propriété MaxDropDownHeight
pour limiter sa taille. Puisque cette propriété n'est pas calculée par le contrôle et est entièrement personnalisable, vous pouvez écrire quelque chose pour calculer la hauteur d'un objet, puis multiplier ce nombre par les éléments maximum que vous souhaitez afficher, puis définir MaxDropDownHeight
en fonction de celui-ci.
+1 Bonne idée, tant que tous les articles ont la même hauteur. Cela devrait probablement être fait dans une propriété jointe. Je vais ajouter une réponse qui a le code réel pour le faire. –
Cette question peut être significative uniquement si tous vos articles ont la même hauteur. Sinon, lorsque vous faites défiler votre ComboBox de haut en bas pour voir différentes parties de la liste des éléments, votre ComboBox deviendra de plus en plus petit au fur et à mesure que vous faites défiler.
Si tous vos articles sont la même hauteur, il est très facile de le faire en utilisant une propriété attachée:
public class ComboBoxHelper : DependencyObject
{
public static int GetMaxDropDownItems(DependencyObject obj) { return (int)obj.GetValue(MaxDropDownItemsProperty); }
public static void SetMaxDropDownItems(DependencyObject obj, int value) { obj.SetValue(MaxDropDownItemsProperty, value); }
public static readonly DependencyProperty MaxDropDownItemsProperty = DependencyProperty.RegisterAttached("MaxDropDownItems", typeof(int), typeof(ComboBoxHelper), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
var box = (ComboBox)obj;
box.DropDownOpened += UpdateHeight;
if(box.IsDropDownOpen) UpdateHeight(box, null);
}
});
private static void UpdateHeight(object sender, EventArgs e)
{
var box = (ComboBox)sender;
box.Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() =>
{
var container = box.ItemContainerGenerator.ContainerFromIndex(0) as UIElement;
if(container!=null && container.RenderSize.Height>0)
box.MaxDropDownHeight = container.RenderSize.Height * GetMaxDropDownItems(box);
}));
}
}
Avec cette propriété, vous pouvez écrire:
<ComboBox ...
my:ComboBoxHelper.MaxDropDownItems="8" />
J'ai testé ce code directement. Le XAML ne génère pas d'erreur ou quoi que ce soit mais quand je lance l'application la liste déroulante reste à environ 5 items et essaye une valeur de 15. – steviesama
Il y a un saut entre les tailles visibles, quand la combobox est ouverte pour la première fois, Définissez DispatcherPriotiry sur Normal. Et maintenant ça fonctionne exactement comme j'en ai besoin. Je vous remercie :) – adminSoftDK
- 1. WPF ComboBox clear
- 2. Liaison ComboBox dans WPF
- 3. WPF couleurs combobox
- 4. WPF Combobox SelectedIndex
- 5. WPF ComboBox SelectedItem enfer
- 6. WPF ComboBox Liaison bidirectionnelle
- 7. ComboBox WPF Trigger
- 8. WPF Combobox SelectedItem Problème
- 9. WPF ComboBox rembourrage
- 10. WPF ComboBox élément sélectionné
- 11. Liaison Combobox WPF Question
- 12. ComboBox WPF contraignant
- 13. ComboBox WPF Reliure Immuable
- 14. Wpf Combobox DataBinding
- 15. WPF DataGrid Combobox
- 16. WPF Datagrid ComboBox DataBinding
- 17. Wpf ComboBox validation Trigger
- 18. WPF ComboBox liant
- 19. ComboBox étrange comportement - WPF
- 20. WPF: Combobox dans TreeviewItem
- 21. WPF ComboBox DropDown Placement
- 22. WPF ComboBox Evénement DataBound?
- 23. Wpf Mvvm ComboBox
- 24. ComboBox WPF Reliure
- 25. WPF Combobox Erreur Validation.ErrorTemplate
- 26. WPF autocomplete Combobox
- 27. WPF ComboBox SelectedItem
- 28. wpf dataagrid textbox + combobox
- 29. WPF XAML ComboBox Largeur
- 30. WPF: Articles ComboBox Max?
Pourquoi n » t limitez-vous simplement le montant que vous chargez dans le 'ComboBox'? Ajoutez seulement jusqu'à votre max. Que voulez-vous que le contrôle fasse quand vous allez au-delà du maximum? Lève une exception? Juste ne pas l'ajouter? – Kelsey
Non ... Plutôt que de coder en dur la hauteur maximale du drop down. Je préfère être en mesure de définir la quantité d'éléments déroulants max à afficher. Désolé je l'ai formulé bizarrement, je pensais aux boîtes à liste déroulante de VB où elles ont une liste déroulante maximum affichée immédiatement. – Kevin