在更改ItemsSource后,如何让Silverlight ComboBox调整下拉列表的大小?

时间:2009-01-14 07:33:07

标签: c# data-binding combobox silverlight-2.0

网上有关于此问题的各种帖子,其中ComboBox仅更改其下拉高度以适合其第一个下拉列表中的项目。对所显示项目的任何更改都不会导致下拉列表调整大小。我发现的各种变通方法对我来说似乎不起作用,所以我想知道是否有人找到了解决这个问题的方法。

我当前的选择是使用MinHeight并将其设置为合理的大小(如果我设置MinHeight和MaxHeight,我得到的问题就像我设置高度一样 - 当项目超出界限时没有滚动条。

我已经尝试更改项目的容器,但似乎他们都有这个问题。有什么想法吗?

请注意,每当我按照多个论坛上的指示更改ItemsSource时,我也尝试以编程方式重新创建组合,但我无法在不崩溃的情况下使其工作。

2 个答案:

答案 0 :(得分:2)

'添加和删除'方法适合我。这就是我做的事情(如果你做的事略有不同,或者其他人想尝试这种方法):


  • 在本地阅读并存储您感兴趣的所有属性
  • 从可视树中删除组合框
  • 将变量设置为空
  • 创建一个新的组合框
  • 恢复上面存储的媒体资源
  • 拿走你最初想到的号码
  • 将其添加回可视树

例如:

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 :(得分:1)

感谢this answer,我找到了一个很好的解决方案。它的效果很好,并不像其他建议那样hacky(尽管有效)。

显然,社区维基这篇文章并不是我的回答。请投票给出真正的答案,markti应该为这个答案加倍。