【问题标题】:How can I get the Silverlight ComboBox to resize the dropdown after I change ItemsSource?更改 ItemsSource 后,如何让 Silverlight ComboBox 调整下拉列表的大小?
【发布时间】:2009-01-14 07:33:07
【问题描述】:

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

我当前的选择是使用 MinHeight 并将其设置为合理的大小(如果我设置 MinHeight 和 MaxHeight,我会遇到与设置 Height 相同的问题 - 当项目超出范围时没有滚动条。

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

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

【问题讨论】:

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


    【解决方案1】:

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


    • 在本地读取并存储您感兴趣的所有属性
    • 从可视化树中移除组合框
    • 将变量设置为空
    • 创建一个新的组合框
    • 恢复您在上面存储的属性
    • 带走你最先想到的数字
    • 将其重新添加到可视化树中

    例如:

    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);
    

    【讨论】:

    • 谢谢,我会试一试——这让我很沮丧,因为我知道这不应该那么难。
    • 亲爱的上帝,请告诉我,这不是唯一的方法!
    • 除了编写自己的组合...是的,似乎是这样。
    • 我不知道 Silverlight 3 中的情况是否有所改善,因为我还没有使用它。这只是目前为了任何严重的事情而避免使用 Silverlight 的原因之一......
    • 在下面查看我最近的解决方案。
    【解决方案2】:

    感谢this answer,我找到了一个很好的解决方案。它效果很好,而且不像其他建议那么老套(虽然有效)。

    显然,社区 wiki-ing 这篇文章,因为这不是我的答案。请为真正的答案投票,markti 值得为此获得双重代表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      相关资源
      最近更新 更多