【发布时间】: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