【问题标题】:Windows 8.1 ComboBox wrap Item textWindows 8.1 ComboBox 换行项目文本
【发布时间】:2014-11-05 16:01:53
【问题描述】:

我有一个很长的字符串,它不会在 ComboBox 项目的一行中提供。

我怎样才能让它包裹项目的文本?

我试过了,但在 Windows 8.1 unviseral App 中不起作用

这是我的组合框

<ComboBox  x:Name="ChildrenAgePickerComboBox_0"  Style="{StaticResource ComboBoxWrappable}" ItemsSource="{Binding ChildrenAgeOptions}"  DisplayMemberPath="DisplayText" />

这是我想要应用的样式以换行

<Style x:Key="ComboBoxWrappable"  TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBase}">
        <Setter Property="ItemTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock TextWrapping="Wrap" MinWidth="200" Text="{Binding}"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

结果是我的组合框根本没有文字,打开时也没有显示任何项目。

DataTemplate 有什么问题?它不渲染项目。 如果我不使用 DataTemplate,它会渲染它们。

【问题讨论】:

  • 您可以将MaxWidth 设置为针对TextBlockComboBoxItem
  • 什么意思?宽度隐藏了内容?我相信绑定不起作用。
  • 您是否尝试过类似&lt;TextBlock MaxWidth="200" TextWrapping="Wrap" Text="{Binding}"/&gt; 的操作,我相信绑定不起作用 是什么意思?如果您看到文字,那么它可以工作
  • 所以问题是文本很长但不换行或根本没有出现文本?如果文本没有出现,则说明DataContextItemsSource 有问题
  • 您是否尝试删除DisplayMemberPath="DisplayText" 并改为使用Text="{Binding DisplayText}

标签: c# wpf windows xaml windows-8.1


【解决方案1】:

总结一下 cmets,您看不到您的文本,因为您不能同时使用 DisplayMemberPathItemTemplate。您应该做的是从ComboBox 中删除DisplayMemberPath="DisplayText" 并将其移动到Text 绑定中

<Style x:Key="ComboBoxWrappable" TargetType="ComboBox" BasedOn="{StaticResource ComboBoxBase}">
   <Setter Property="ItemTemplate">
      <Setter.Value>
         <DataTemplate>
            <TextBlock TextWrapping="Wrap" Text="{Binding DisplayText}"/>
         </DataTemplate>
      </Setter.Value>
   </Setter>
</Style>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多