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

原文: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;
        }
    }

使用的时候这样调用:

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/12329527.html

时间: 2024-08-01 06:44:29

wpf textblock超出显示范围后显示tooltip的相关文章

【UWP】仅在TextBlock文本溢出时显示Tooltip

原文:[UWP]仅在TextBlock文本溢出时显示Tooltip 前言 这是我今天在回答SO问题时偶然遇到的,觉得可能还比较通用,就记录下来以供参考. 通常,我们使用ToolTip最简单的方式是这样: <TextBlock Text="Test" ToolTipService.ToolTip="Test" /> 这样在光标悬浮在TextBlock上方时,会显示一个提示条,但是这似乎又违背了一个设计原则: ToolTip作为提示,应该仅在当前内容显示不全

textview显示三行多余的隐藏点击按钮后显示

首先布局 因为我这个是列表所以这只是一个item <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Re

WPF drag过程中显示ToolTip.

原文:WPF drag过程中显示ToolTip. 在drag/drop过程中,我们在判断出over的元素上是否可以接受drag的东西之后,通常是通过鼠标的样式简单告诉用户这个元素不接受现在drag的内容,但是用户通常不知道具体的原因,有时候为了增强客户体验,会在over的过程中显示tooltip来告诉用户为什么不能接受drag的东西或者告诉用户over的元素是什么东西,特别是一些绘图或者其他一些复杂的应用软件,这种方式比较广泛. WPF 给各种控件提供了ToolTip属性,可以通过设置该属性的值

文字超出隐藏并显示省略号

文字超出了需要隐藏并显示省略号这个在工作中很多时候都要用到,我想很多人都碰到过吧,这个有两种解决方法 一是用程序开截取字符长度,这个其实也是可以的 第二种是用样式来做,这里主要介绍一下用样式怎么来做吧,我话也不多说了吧直接上代码吧, css样式如下: .css1{ color:#6699ff;border:1px #ff8000 dashed; margin-bottom:20px; width: 20em;/*不允许出现半汉字截断*/ } .css2 { overflow: hidden; /

HTML中超出的内容显示为省略号

CSS超出文本用省略号显示 兼容firefox IE6 IE7 第一种方法: 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>css设置文字隐藏</title> 6 <style type="text/css"> 7 .css1{ 8 color:#6699ff; 9 border:1px #

WPF安装打印机驱动后PrintDialog 执行打印事件

原文:WPF安装打印机驱动后PrintDialog 执行打印事件 WPF可以很好的利用流文档来实现打印预览和PrintDialog 实现打印功能,但是我在这只是写了一个很简单的打印功能演示. PagePrint布局代码: d:DesignHeight="350" d:DesignWidth="525" Background="White" Title="PagePrint"> <Canvas x:Name=&quo

C++ CEF 浏览器中显示 Tooltip(标签中的 title 属性)

在 Windows 中将 CEF 集成到 C++ 客户端以后,默认是无法显示 tooltip 的,比如图片标签中的 title 属性. 实现的方式其实很简单,按下面的步骤操作就可以: 创建一个文本文件,文件名为 app.manifest,内容如下,将这个文件放到源代码文件夹 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="

WPF如何去掉ContextMenu的显示和隐藏动画

原文:WPF如何去掉ContextMenu的显示和隐藏动画 首先上一个例子: <Grid Name="grid" Margin="5"> <ListBox> <ListBoxItem Content="asdasd"/> <ListBoxItem Content="asdasd"/> <ListBoxItem Content="asdasd"/>

AS3 调用gotoAndStop后,显示对象为null的解决方法

再使用flash制作UI资源时通常我们会在一个MC的不同帧中引入其他的MC(有可能引入的MC中还包含了MC),并为这些引入的MC设置实例名称.通过使用gotoAndStop到第几帧来引用里面的资源...可惜有的时候会报:引入的这个显示对象为null....这该如何是好呢?? 接下来就是我在使用FB与IDEA进行实际工作的时候找到的一些解决办法... 第一种: 有时候我们使用的已经是别人做好的UI...或者是自己通过反编译出来的UI... 用flash打开后导入IDEA中如果使用gotoAndSt