XAML ComboBox 项目字符串太长 - 可以转移到下一行吗?

Posted

技术标签:

【中文标题】XAML ComboBox 项目字符串太长 - 可以转移到下一行吗?【英文标题】:XAML ComboBox Item string too long - can it be transferred to next row? 【发布时间】:2016-05-12 13:00:30 【问题描述】:

我正在开发 Windows Phone 应用程序(基于 XAML/C#)。 所以我有一个ComboBox 控件,它包含Items 作为数据库中的字符串。 我注意到当有更多项目时,ComboBox 会在整个设备屏幕上自行拉伸,这是可以的,但问题是当项目字符串太长时 它被切断了。

因此可能会有疑问,如何将字符串转移到下一行,并且项目保持完整(2 行上的 1 个项目)。

我的第二个问题是如何在项目之间添加行分隔符?

这是我的 XAML 组合框代码:

<ComboBox 
    x:Name="ComboBox" 
    HorizontalAlignment="Right" 
    Margin="0,49,0,0" 
    VerticalAlignment="Top" 
    Width="193"
    PlaceholderText="Choose" 
    SelectionChanged="comboBox_SelectionChanged"/>

我正在添加这样的项目:

for (int i = 0; i < items.Count; i++)

    if (!ComboBox.Items.Contains(item[i].item_name))
    
        ComboBox.Items.Add(item[i].item_name);
    

【问题讨论】:

【参考方案1】:

您必须使用TextBlock,它有一个名为TextWrapping 的属性。但要使用它,您必须定义ComboBox.ItemTemplate

<ComboBox 
    x:Name="ComboBox" 
    HorizontalAlignment="Right" 
    Margin="0,49,0,0" 
    VerticalAlignment="Top" 
    Width="193"
    PlaceholderText="Choose" 
    SelectionChanged="comboBox_SelectionChanged">

    <!-- Template Start -->
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock 
            Text="item_name" 
            TextWrapping="Wrap" />      <!-- it will wrap the text -->
        </DataTemplate>
    </ComboBox.ItemTemplate>
    <!-- Template End -->

</ComboBox>

【讨论】:

以上是关于XAML ComboBox 项目字符串太长 - 可以转移到下一行吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 wpf:ComboBox 绑定到 XAML 中的静态类

C#ComboBox SelectedItem未更新

c#WPF XAML对ComboBox.Resources项的RelativeSource引用

ComboBox与空项目?

ComboBox绑定XmlDataProvider数据

XAML:在组合框项目突出显示上显示按钮