Esiste comunque la possibilità di impostare il numero massimo di voci a discesa anziché l'altezza massima a discesa in WPF? Grazie! -KevinWPF ComboBox MaxDropDownItems
risposta
Non esiste un modo diretto per visualizzare il numero X di elementi. È necessario utilizzare la proprietà MaxDropDownHeight
per limitare la sua dimensione. Dal momento che questa proprietà non è calcolata dal controllo ed è completamente personalizzabile, potresti scrivere qualcosa per calcolare l'altezza di un oggetto e poi moltiplicarla per le voci massime che desideri visualizzare e quindi impostare MaxDropDownHeight
in base ad essa.
+1 Idea giusta, purché tutti gli elementi abbiano la stessa altezza. Questo dovrebbe probabilmente essere fatto in una proprietà allegata. Aggiungerò una risposta che ha il codice effettivo per farlo. –
Questa domanda può essere significativa solo se tutti i tuoi articoli hanno la stessa altezza. Altrimenti mentre scorri il tuo ComboBox su e giù per vedere diverse parti dell'elenco, il tuo ComboBox diventerà sempre più piccolo mentre scorri.
Se tutti i vostri articoli sono la stessa altezza, è molto semplice per farlo utilizzando una proprietà associata:
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);
}));
}
}
Con questa struttura si può scrivere:
<ComboBox ...
my:ComboBoxHelper.MaxDropDownItems="8" />
Ho testato questo codice direttamente. XAML non genera un errore o altro, ma quando eseguo l'applicazione l'altezza dell'elenco delle caselle combinate rimane a circa 5 elementi e ho provato un valore di 15. – steviesama
C'è un salto tra le dimensioni visibili, quando la casella combinata è aperta per la prima volta, I imposta DispatcherPriotiry su Normal. E ora funziona esattamente come ne ho bisogno. Grazie :) – adminSoftDK
- 1. WPF ComboBox SelectedItem
- 2. colonna combobox datagrid wpf
- 3. Styling Elementi ComboBox WPF
- 4. associazione combobox wpf
- 5. WPF Binding Combobox
- 6. ComboBox WPF predefinito ControlTemplate
- 7. WPF ComboBox modificabile
- 8. WPF: Nullable ComboBox
- 9. WPF Combobox modificabile IsFocused problem
- 10. Selezione tag ComboBox WPF MVVM
- 11. C# Comportamento Combobox WPF strano
- 12. MVVM WPF Dettagli principali Combobox
- 13. WPF DataGrid ComboBox causa InvalidOperationException
- 14. Supporto comandi WPF in ComboBox
- 15. ComboBox WPF per dattilografi lenti
- 16. WPF: Associazione a ComboBox SelectedItem
- 17. WPF ComboBox Associazione a ObservableCollection
- 18. C# WPF comboBox strano numero
- 19. ComboBox Databound WPF con elemento 'Nuovo ...'
- 20. WPF: ComboBox senza pulsante a discesa
- 21. WPF ComboBox SelectedItem - passare al valore precedente
- 22. Come compilare la combobox wpf in xaml
- 23. Valore chiave Coppia Combobox in WPF
- 24. Come "compilare" una GridViewColumn con ComboBox (WPF)?
- 25. DataBinding WPF: modifica proprietà annullata - Combobox disallinea
- 26. C# WPF ComboBox Mouse sul colore
- 27. WPF Combobox con auto-completamento/filtro automatico?
- 28. Come creare ComboBox come UserControl in WPF
- 29. Ottenere tag dell'elemento selezionato in WPF ComboBox
- 30. Cancellare programmaticamente la selezione in WPF ComboBox
Perché don' t limiti solo la quantità che stai caricando al 'ComboBox'? Aggiungi solo al massimo. Cosa ti aspetti dal controllo quando superi il limite massimo? Lanciare un'eccezione? Non aggiungerlo? – Kelsey
No ... Piuttosto che l'altezza massima di codifica hard disc down. Preferirei essere in grado di impostare la quantità di elementi a discesa massima da visualizzare. Mi spiace di averlo pronunciato in modo strano, stavo pensando alle caselle combinate di VB in cui hanno un drop down massimo visualizzato contemporaneamente. – Kevin