wpf textblock超出显示范围后显示tooltip
2021-03-19 11:25
标签:click view ext bind rop splay direction current value
使用的时候这样调用: wpf textblock超出显示范围后显示tooltip 标签:click view ext bind rop splay direction current value 原文地址:https://www.cnblogs.com/lonelyxmas/p/12329527.htmlpublic static class TextTrmmingShowToolTip
{
public static readonly DependencyProperty IsToolTipProperty = DependencyProperty.RegisterAttached(
"IsToolTip", typeof(bool), typeof(TextTrmmingShowToolTip),
new PropertyMetadata(default(bool), TextPropertyChangedCallback));
public static void SetIsToolTip(DependencyObject element, bool value)
{
element.SetValue(IsToolTipProperty, value);
}
public static bool GetIsToolTip(DependencyObject element)
{
return (bool) element.GetValue(IsToolTipProperty);
}
private static void TextPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var tb = d as TextBlock;
if (tb == null) return;
tb.SizeChanged -= TbOnSizeChanged;
if (!(bool) e.NewValue) return;
tb.SizeChanged += TbOnSizeChanged;
}
private static void TbOnSizeChanged(object sender, SizeChangedEventArgs e)
{
var tb = sender as TextBlock;
if (tb == null) return;
SetToolTip(tb);
}
private static void SetToolTip(TextBlock tb)
{
if (string.IsNullOrEmpty(tb.Text))
{
tb.ToolTip = null;
return;
}
var isTrim = IsTextTrimmed(tb);
tb.ToolTip = isTrim ? tb.Text : null;
}
private static bool IsTextTrimmed(TextBlock textBlock)
{
Typeface typeface = new Typeface(
textBlock.FontFamily,
textBlock.FontStyle,
textBlock.FontWeight,
textBlock.FontStretch);
FormattedText formattedText = new FormattedText(
textBlock.Text,
System.Threading.Thread.CurrentThread.CurrentCulture,
textBlock.FlowDirection,
typeface,
textBlock.FontSize,
textBlock.Foreground);
bool isTrimmed = formattedText.Width >= textBlock.ActualWidth;
return isTrimmed;
}
}
converter:TextTrmmingShowToolTip.IsToolTip="True" />
上一篇:WPF窗口默认TextBox焦点
文章标题:wpf textblock超出显示范围后显示tooltip
文章链接:http://soscw.com/index.php/essay/66218.html