WPF ComboBox MaxDropDownItems

Там должен так или иначе определить максимальный номер выпадающих объектов, а не макс. выпадающей высоты в WPF?Спасибо! - Kevin

8
задан Kevin 10 June 2010 в 20:32
поделиться

2 ответа

Нет прямого способа указать количество элементов на дисплее X. Вы должны использовать свойство MaxDropDownHeight , чтобы ограничить его размер. Поскольку это свойство не вычисляется элементом управления и является полностью настраиваемым, вы можете написать что-нибудь для вычисления высоты элемента, а затем умножить это на максимальное количество элементов, которые вы хотите отобразить, а затем установить MaxDropDownHeight на его основе.

2
ответ дан 5 December 2019 в 12:07
поделиться

Этот вопрос может иметь смысл только в том случае, если все ваши предметы имеют одинаковую высоту. В противном случае, когда вы прокручиваете свой 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" />
12
ответ дан 5 December 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: