Can you limit the length of Text visible in a WPF TextBlock?

前端 未结 2 1377
时光说笑
时光说笑 2020-12-21 05:27

I have a listbox that is bound to a database query result. I\'m using an item template that shows the subject on one line and I want it to show preview of the body on anothe

相关标签:
2条回答
  • 2020-12-21 05:40

    You can use 'TextTrimming' Property of a Textblock. Set TextTrimming = "CharacterEllipsis". You might need to play with Width to manage how many characters you really want to display.

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

    Add this textblock in your item template

    0 讨论(0)
  • 2020-12-21 05:48

    Of course!

    <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>
    

    Then use this converter:

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

    Looks like:

    Shot

    Best of luck!

    0 讨论(0)
提交回复
热议问题