如何在wpf中的文本块的开头添加CharacterEllipsis?

问题描述 投票:0回答:2

我有一个

TextBlock
TextTrimming = TextTrimming.CharacterEllipsis
,我希望这些点出现在开头。有这个属性吗?

例如,如果我有文本“123456789ABCDEF”,它会显示“12345678...”,但我想要它“...89ABCDEF”。

谢谢

wpf text character ellipsis trim
2个回答
2
投票

我尝试了一下 FlowDirection,它在开始时渲染 ...,但仍然以 1234 等开始。

但是我确实遇到了这个非常相似的问题:

WPF ListView 中字符串开头的省略号

那里有人有手动执行的例程。希望有帮助:)


0
投票

仅适用于仍在寻找“快速而简单”答案的人们。 使用转换器可能是一个好方法:

public class TextTrimmingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    if (value is string stringValue)
    {
        var paramInt = parameter?.ToInt(int.MaxValue); // this ToInt is custom, use whatever to convert your param (the max size of you textblock) into int
        if (paramInt == int.MaxValue)
            return stringValue;

        var formattedText = new FormattedText(stringValue,
                                              CultureInfo.GetCultureInfo("en-us"),
                                              FlowDirection.LeftToRight,
                                              new Typeface("Arial"),
                                              14,
                                              Brushes.Black);
        var textWidth = formattedText.Width;
        if (textWidth > paramInt)
            return $"...{stringValue.Substring(stringValue.Length / 2)}"; // use a substring length that fits you
        return stringValue;
    }
    return value;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => Binding.DoNothing;

然后就这样使用它:

                        <TextBlock Text="{Binding MyTextToTrim,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay,Converter={StaticResource TextTrimmingConverter},ConverterParameter=150}"
                               MaxWidth="150"
                               VerticalAlignment="Center" />
© www.soinside.com 2019 - 2024. All rights reserved.