如何在 WPF ComboBox 中正确显示过长的文本
Posted
技术标签:
【中文标题】如何在 WPF ComboBox 中正确显示过长的文本【英文标题】:How to display too long text properly in WPF ComboBox 【发布时间】:2012-05-19 22:51:18 【问题描述】:我有一个显示各种长度文本的组合框。对于不长的文本没有问题。对于长于 ComboBox 宽度的文本,我想修剪文本并在末尾添加“...”(省略号)以正确显示它们。底线是我不想改变 ComboBox 的宽度。有谁知道怎么做?
【问题讨论】:
【参考方案1】:为您的ComboBox
使用自定义ItemTemplate
,它使用TextBlock
并将TextTrimming
属性设置为CharacterEllipsis
。
例子:
<ComboBox ItemsSource="..." SelectedValuePath="...">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock
Text="Binding ..."
TextTrimming="CharacterEllipsis" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
【讨论】:
以前存在于 Combobox 上的绑定在这种格式下不起作用【参考方案2】:正如罗斯所说,答案是实现自定义ItemTemplate
。但是,要使其正常工作,您需要正确地进行绑定。
关于此方法的注意事项:您不能同时设置DisplayMemberPath
和ItemTemplate
,它必须是一个或另一个。
因此,对于显示成员为项目的一般情况(例如对于字符串),您可以使用不带属性的绑定来绑定到模板的DataContext
:
<ComboBox ItemsSource="..." SelectedValuePath="...">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding " TextTrimming="CharacterEllipsis" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
或者,你可以把它放在一个样式中。
<Style TargetType="x:Type ComboBox">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="Binding " TextTrimming="CharacterEllipsis" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
对于要绑定到对象的特定属性的情况,类似于使用 DisplayMemberPath
属性的方式,将绑定替换为您将用于对象上的属性的绑定捆绑。因此,将我的第一个示例中的第四行替换为如下内容:
<TextBlock Text="Binding MyDisplayMemberProperty" TextTrimming="CharacterEllipsis" />
绑定是在绑定到您的 ComboBox 类型的单个项目的上下文中。为了使这一点更明确,您可以执行以下操作:
<DataTemplate DataType="x:Type namespace:MyItemType">
<!-- My DataTemplate stuff here -->
</DataTemplate>
当您在DataTemplate
中编写代码时,这将为您提供有关对象属性的提示。
【讨论】:
这个答案非常好,Lauraducky。回答老问题可能会有风险,以防一个人的工作似乎没有得到回报,但本页面的 5,917 多名读者中的一些人将从您的工作中受益。继续加油! @halfer 谢谢。我当然没有因为期望得到很多赞成而回答,希望这对那里的人有用:)【参考方案3】:您可以将TextTrimming CharacterEllipsis
或WordEllipsis
用于组合框中的文本块。
【讨论】:
【参考方案4】:也适用于更复杂的 DataTemplate;但是,我不得不求助于 DockPanel 而不是标准 WrapPanel。
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<AccessText DockPanel.Dock="Left" Text="Binding Icon"/>
<TextBlock Text="Binding Name" TextTrimming="CharacterEllipsis" />
</DockPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
【讨论】:
以上是关于如何在 WPF ComboBox 中正确显示过长的文本的主要内容,如果未能解决你的问题,请参考以下文章
wpf中如何实现Combobox作为ListView某列显示
wpf combobox 关闭窗口后,再次调用不显示已经选择的值?