Там должен так или иначе определить максимальный номер выпадающих объектов, а не макс. выпадающей высоты в WPF?Спасибо! - Kevin
Нет прямого способа указать количество элементов на дисплее X. Вы должны использовать свойство MaxDropDownHeight
, чтобы ограничить его размер. Поскольку это свойство не вычисляется элементом управления и является полностью настраиваемым, вы можете написать что-нибудь для вычисления высоты элемента, а затем умножить это на максимальное количество элементов, которые вы хотите отобразить, а затем установить MaxDropDownHeight
на его основе.
Этот вопрос может иметь смысл только в том случае, если все ваши предметы имеют одинаковую высоту. В противном случае, когда вы прокручиваете свой ComboBox вверх и вниз, чтобы увидеть различные части списка элементов, ваш ComboBox будет становиться больше и меньше по мере прокрутки.
Если все ваши элементы имеют одинаковую высоту, это очень легко сделать с помощью прикрепленного свойства:
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);
}));
}
}
С помощью этого свойства вы можете написать:
<ComboBox ...
my:ComboBoxHelper.MaxDropDownItems="8" />