zoukankan      html  css  js  c++  java
  • 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" />

  • 相关阅读:
    2019沈阳网路赛 D. Fish eating fruit (点分治)
    2019南京网路赛 A.The beautiful values of the palace (主席树)
    洛谷 P2634 [国家集训队]聪聪可可(点分治)
    AcWing252 树 (点分治模板题)
    点分治模板 (洛谷 P3806)
    2020牛客寒假算法基础集训营2 J-求函数(线段树维护矩阵乘法)
    七夕祭(贪心+中位数)
    数据结构-集合
    数据结构-广义表
    数据结构-稀疏矩阵
  • 原文地址:https://www.cnblogs.com/sczmzx/p/10593669.html
Copyright © 2011-2022 走看看