视频介绍了一个方案,可以判断TextBlock复杂的内容(包含Run/Span等inline标签)情况下是否显示省略号/是否被截取/截断,主要代码
public class TextBlockEx:TextBlock
{
/// <summary>
/// 当前文字是否被截取
/// </summary>
public bool IsTextTrimmed
{
get { return (bool)GetValue(IsTextTrimmedProperty); }
private set { SetValue(IsTextTrimmedProperty, value); }
}
// Using a DependencyProperty as the backing store for IsTextTrimming. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsTextTrimmedProperty =
DependencyProperty.Register("IsTextTrimmed", typeof(bool), typeof(TextBlock), new PropertyMetadata(false));
protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
IsTextTrimmed = GetIsTrimming();
return base.GetLayoutClip(layoutSlotSize);
}
bool GetIsTrimming()
{
if (TextTrimming == TextTrimming.None)
{
return false;
}
if (TextWrapping == TextWrapping.NoWrap) //比较长度
{
Size size = new Size(double.MaxValue, RenderSize.Height);
var needsize= MeasureOverride(size);
if (needsize.Width > RenderSize.Width)
{
MeasureOverride(RenderSize);
return true;
}
}
else //比较高度
{
Size size = new Size(RenderSize.Width,double.MaxValue);
var needsize = MeasureOverride(size);
if (needsize.Height > RenderSize.Height)
{
MeasureOverride(RenderSize);
return true;
}
}
return false;
}
}
视频地址 https://www.youtube.com/watch?v=Y2431eccUjM
项目地址:https://www.youtube.com/watch?v=Y2431eccUjM&list=PL7i83Zih_mfuDv9V5qXLI5GrNVoIeJ71k&index=2