10

我有一个显示各种长度文本的组合框。对于不长的文本没有问题。对于长于 ComboBox 宽度的文本,我想修剪文本并在末尾添加“...”(省略号)以正确显示它们。底线是我不想改变 ComboBox 的宽度。有谁知道如何做到这一点?

4

4 回答 4

13

ItemTemplate为您的使用自定义ComboBox,它使用TextBlock属性TextTrimming设置为的 a CharacterEllipsis

例子:

<ComboBox ItemsSource="..." SelectedValuePath="...">
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock 
        Text="{Binding ...}" 
        TextTrimming="CharacterEllipsis" />
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>
于 2012-05-11T10:38:10.013 回答
8

正如罗斯所说,答案是实现自定义ItemTemplate. 但是,要使其正常工作,您需要正确进行绑定。

关于此方法的注意事项:您不能同时设置 theDisplayMemberPath和 the 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.

于 2018-01-30T00:36:02.197 回答
0

您可以使用TextTrimming CharacterEllipsisWordEllipsis组合框中的文本块。

于 2012-05-11T10:36:45.657 回答
0

也适用于更复杂的 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> 
于 2021-02-21T19:51:36.727 回答