wpf textblock超出显示范围后显示tooltip

public 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;
        }
    }
View Code

使用的时候这样调用:

<TextBlock
Text="{Binding Name}"
converter:TextTrmmingShowToolTip.IsToolTip="True" />

转载于:https://www.cnblogs.com/sczmzx/p/10593669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值