你能限制WPF TextBlock中可见文本的长度吗?

Sin*_*tic 4 wpf truncate textblock

我有一个绑定到数据库查询结果的列表框.我正在使用一个项目模板,在一行上显示主题,我希望它在另一行显示正文的预览.我想知道的是 - 显然身体太长了以至于无法适应那里,我能以某种方式将其设置为仅显示第一个如此多的字符并在其后添加省略号,就像预览一样吗?或者甚至一些接近的东西也没关系.例如:

而不是显示:

Lorem ipsum dolor坐下来,精致的adipistur elit.Suspendisse vitae eros nibh.Pellentesque居民morbi tristique senectus et netus et malesuada fames ac turpis egestas.Donec augue metus,iaculis id porta non,pellentesque quis turpis.Donec rutrum diam eget tortor bibendum vel blandit odio iaculis.Curabitur pretium adipiscing orci,ut pulvinar justo vehicula non.Mauris nec ipsum velit.Sed et auctor nibh.Proin ac ultricies tellus.

它会显示类似的东西

Lorem ipsum dolor坐下来,精致的adipistur elit.Suspendisse ...

有任何想法吗?

Ujj*_*wal 11

您可以使用Textblock的"TextTrimming"属性.设置TextTrimming ="CharacterEllipsis".您可能需要使用"宽度"来管理您真正想要显示的字符数.

<TextBlock TextTrimming="CharacterEllipsis" Text="This is a sample long text. This will get Trimmed."/>
Run Code Online (Sandbox Code Playgroud)

在商品模板中添加此文本块


Jer*_*xon 6

当然!

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <sys:String x:Key="MyData">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse vitae eros nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec augue metus, iaculis id porta non, pellentesque quis turpis. Donec rutrum diam eget tortor bibendum vel blandit odio iaculis. Curabitur pretium adipiscing orci, ut pulvinar justo vehicula non. Mauris nec ipsum velit. Sed et auctor nibh. Proin ac ultricies tellus.</sys:String>
        <local:MyTruncateConverter x:Key="MyConverter" />
    </Window.Resources>
    <TextBlock Text="{Binding Source={StaticResource MyData},
        Converter={StaticResource MyConverter}, 
        ConverterParameter=50}" 
        TextWrapping="Wrap" />
</Window>
Run Code Online (Sandbox Code Playgroud)

然后使用这个转换器:

public class MyTruncateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
            return string.Empty;
        if (parameter == null)
            return value;
        int _MaxLength;
        if (!int.TryParse(parameter.ToString(), out _MaxLength))
            return value;
        var _String = value.ToString();
        if (_String.Length > _MaxLength)
            _String = _String.Substring(0, _MaxLength) + "...";
        return _String;
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

好像:

射击

祝你好运!