我有一个ComboBox,可以显示不同长度的文本。对于不是很长的文本,没有问题。对于长于ComboBox宽度的文本,我想裁剪文本并添加"...“(省略号)以正确地显示它们。底线是我不想改变ComboBox的宽度。有人知道怎么做吗?
发布于 2012-05-11 18:38:10
对ComboBox
使用自定义ItemTemplate
,这将使用TextTrimming
属性设置为CharacterEllipsis
的TextBlock
。
示例:
<ComboBox ItemsSource="..." SelectedValuePath="...">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding ...}"
TextTrimming="CharacterEllipsis" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
发布于 2018-01-30 08:36:02
正如罗斯所说,答案是实现一个自定义的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
中编写代码时,这将为您提供有关对象上的属性的提示。
发布于 2012-05-11 18:36:46
您可以对组合框中的文本块使用TextTrimming CharacterEllipsis
或WordEllipsis
。
https://stackoverflow.com/questions/10549700
复制相似问题