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" />

  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/sczmzx/p/10593669.html
Copyright © 2011-2022 走看看