WPF ComboBox MaxDropDownItems

无论如何设置下拉项的最大数量而不是WPF中的最大下拉高度? 谢谢! -Kevin

如果您的所有商品都具有相同的高度,则此问题可能有意义。 否则,当您向上和向下滚动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); })); } } 

有了这个属性,你可以写:

  

没有直接的方式来说明显示X个项目。 您必须使用MaxDropDownHeight属性来限制它的大小。 由于此属性不是由控件计算的并且是完全可自定义的,因此您可以编写一些内容来计算项目的高度,然后根据要显示的最大项目多次,然后根据它设置MaxDropDownHeight

我有一个类似的问题,combobox下拉不会占据整个垂直空间 – 尽管有20个项目有足够的垂直空间,我会在3到4个项目之后获得垂直滚动条。 我创建了一个tempList并将comboboxitems添加到该列表中。 将此tempList分配给ComboBox的ItemsControl绑定,它给出了combobox的初始下拉高度。 现在combobox可以显示20个没有垂直滚动条的项目。

MaxDropDownHeight在初始化视图之前和之后都没有工作。

希望它可以帮到某人!

谢谢,

RDV