Как я могу заставить ComboBox Silverlight изменить размер выпадающего меню после изменения ItemsSource? - PullRequest
2 голосов
/ 14 января 2009

В Интернете есть различные сообщения об этой проблеме, из-за которых ComboBox изменяет только высоту выпадающего меню, чтобы соответствовать элементам самого первого выпадающего списка. Любые изменения в отображаемых элементах не приводят к изменению размера выпадающего меню. Различные обходные пути, которые я нашел, похоже, не работают для меня, поэтому мне было интересно, нашел ли кто-нибудь способ решить эту проблему.

Моя текущая опция - использовать MinHeight и установить для него разумный размер (если я установлю MinHeight и MaxHeight, я получу ту же проблему, как если бы я установил Высота - без полосы прокрутки, когда элементы выходят за границы.

Я пытался изменить контейнер для предметов, но, похоже, у всех есть эта проблема. Есть идеи?

Обратите внимание, что я также пытался программно воссоздать комбо при каждом изменении ItemsSource, как указано на нескольких форумах, но я не могу заставить это работать без сбоев.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2009

Метод «добавить и удалить» работает для меня. Вот что я делаю (если вы делаете что-то немного другое или кто-то другой хочет попробовать этот метод):


  • Прочитайте и сохраните локально все интересующие вас объекты
  • Удалить поле со списком из визуального дерева
  • Установить переменную на ноль
  • Создать новое поле со списком
  • Восстановление свойств, которые вы сохранили выше
  • Забери номер, о котором ты впервые подумал
  • Добавьте его обратно в визуальное дерево

Например:

string lName = lComboBox.Name;
DataTemplate lTemplate = lComboBox.ItemTemplate;
Thickness lMargin = lComboBox.Margin;
// Other properties

LayoutParent.Children.Remove(lComboBox);

lComboBox= null;
lComboBox= new ComboBox(){
    Name = lName,
    ItemTemplate = lTemplate,
    Margin = lMargin,
    ItemsSource = lList // Your datasource
};

LayoutParent.Children.Add(lComboBox);
1 голос
/ 10 июля 2009

Я нашел отличное решение благодаря этому ответу . Он отлично работает и не так хакерски, как другие предложения (эффективны).

Очевидно, сообщество викилорует этот пост, так как это не мой ответ. Пожалуйста, проголосуйте за реальный ответ, markti заслуживает двойного повторения за этот.

...