我有一个
TextBlock
和 TextTrimming = TextTrimming.CharacterEllipsis
,我希望这些点出现在开头。有这个属性吗?
例如,如果我有文本“123456789ABCDEF”,它会显示“12345678...”,但我想要它“...89ABCDEF”。
谢谢
我尝试了一下 FlowDirection,它在开始时渲染 ...,但仍然以 1234 等开始。
但是我确实遇到了这个非常相似的问题:
那里有人有手动执行的例程。希望有帮助:)
仅适用于仍在寻找“快速而简单”答案的人们。 使用转换器可能是一个好方法:
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" />