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

时间:2011-08-24 05:25:58

标签: wpf truncate textblock

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

而不是显示:

  

Lorem ipsum dolor坐下来,精神上的精神。 Suspendisse   简历爱神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坐下来,精神上的精神。   Suspendisse ...

任何想法?

2 个答案:

答案 0 :(得分:11)

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

<TextBlock TextTrimming="CharacterEllipsis" Text="This is a sample long text. This will get Trimmed."/>

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

答案 1 :(得分: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>

然后使用此转换器:

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();
    }
}

看起来像:

Shot

祝你好运!