【问题标题】:Autosizing ComboBox dropdown to content in Silverlight根据 Silverlight 中的内容自动调整 ComboBox 下拉列表
【发布时间】:2009-04-15 22:41:37
【问题描述】:

我的 Silverlight 用户控件中有这个 ComboBox:

       <ComboBox  
            AutomationProperties.AutomationId="cmbProjects" 
            Grid.Row="0" 
            Grid.Column="2" 
            ItemsSource="{Binding Projects}"
            SelectedItem="{Binding SelectedProject, Mode=TwoWay}"
            Style="{StaticResource DefaultComboBoxStyle}"                       
            >
            <ComboBox.ItemTemplate>
                <DataTemplate>                   
                    <StackPanel>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
                            <TextBlock Foreground="DarkRed" AutomationProperties.AutomationId="{Binding Number}" Width="100" Margin="0" Text="{Binding Number, Converter={StaticResource StringFormatter},ConverterParameter='\{0\}'}" />
                            <TextBlock AutomationProperties.AutomationId="{Binding Description}" Text="{Binding Description, Converter={StaticResource StringFormatter},ConverterParameter='\{0\}       '}"  />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

填充组合框的大多数项目的长度超过了控件的宽度。当我下拉列表时,下拉列表会扩展,但不会完全扩展至项目内容的宽度,从而导致内容被水平滚动条剪裁。内容位于控件原始宽度内的完全相同的组合框不会发生这种情况。

在 WPF 中,我可以简单地将项目容器的宽度设置为自动;在 Silverlight 中,这会导致灾难性错误。我可以将 with 设置为一个很大的数字,但无论宽度如何,滚动仍然会出现。此外,在 Silverlight 2 beta 2 中有一个属性 DropDownWidth,其中一个选项是“自动”,我在 RTM 中看不到。

我可以通过一些技巧来解决这个问题,主要是隐藏水平滚动条并附加一堆字符,以便下拉菜单完全展开以显示项目内容。显然,这种 hack 并不理想。有没有人遇到过类似的问题?我是否缺少一些东西来强制组合框在没有滚动条的情况下完全展开?

ib.

【问题讨论】:

    标签: c# .net silverlight xaml silverlight-2.0


    【解决方案1】:

    似乎他们在 SL3 中修复了它。

    如果您想调整 PopUp,您可以在 ComboBox 的控制模板中进行。在 Blend 中执行以下步骤:

    1. 右键单击组合框
    2. 选择“编辑控制部件(模板)”
    3. 选择“编辑副本”

    这将复制开箱即用的控件样式和模板,以便您可以将 ComboBox 的 PopUp 内的 ScrollViewer 调整为您想要的内容。

    您可能想尝试我描述的解决方案here。它详细说明了如何确保在添加或删除项目时更新组合框弹出窗口的高度和宽度。

    【讨论】:

    • 是的,我已经做到了,我能想到的最好的修复是我在原始问题中提到的那个,但我可以直接从 ComboBox 访问修复所需的 ScrollViewer 属性.无论如何我都会给你投票>8P SL3 FTW!
    • 查看我的新编辑。我发布了另一个我认为可能对您有帮助的主题的链接。
    【解决方案2】:

    您可以使用 ComboBox 控件的 MaxDropDownHeight 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-27
      • 2023-04-04
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      相关资源
      最近更新 更多