自动调整ComboBox下拉列表到Silverlight中的内容

时间:2009-04-15 22:41:38

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

我在Silverlight UserControl中有这个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中,我可以简单地将项容器的宽度设置为auto;在Silverlight中,这会导致灾难性的错误。我可以将with设置为一个巨大的数字,但无论宽度如何,滚动仍然会出现。另外,在Silverlight 2 beta 2中有一个属性DropDownWidth,其中一个选项是“Auto”,我在RTM中看不到。

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

IB。

2 个答案:

答案 0 :(得分:2)

看起来他们在SL3中修复了它。

如果要调整PopUp,可以在ComboBox的控制模板中执行此操作。在Blend中,请按照以下步骤操作:

  1. 右键单击ComboBox
  2. 选择“编辑控制部件(模板)”
  3. 选择“编辑副本”
  4. 这将复制开箱即用的控件样式&amp;模板,以便您可以将ComboBox的PopUp中的ScrollViewer调整到您心中的内容。

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

答案 1 :(得分:0)

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