WPF 文字换行TextWrapping 显示不全用省略号TextTrimming 显示不全弹提示内容ToolTip

原文:WPF 文字换行TextWrapping 显示不全用省略号TextTrimming 显示不全弹提示内容ToolTip

【TextBlock】

换行? ? TextWrapping="Wrap"

内容显示不全时显示省略号,如 “AAA...”? ??TextTrimming="CharacterEllipsis" //以单词边界做截断

鼠标提示? ?<ToolTip>

?

例:??

TextBlock不允许换行,超出后显示省略号截断,超出的情况鼠标移上去会弹出提示内容。

?①? .xaml

<!--xaml 内容不允许换行,显示不下用省略号-->
<TextBlock TextTrimming="CharacterEllipsis" Width="150" TextWrapping="NoWrap" Text="AAAA">
    <TextBlock.ToolTip>
        <ToolTip Style="{DynamicResource TooltipStyle}" Content="BBB"/>
    </TextBlock.ToolTip>
</TextBlock>

?② ToolTip样式定义

属性Visibility绑定转换器,仅当内容显示不全时弹出

<Style x:Key="TooltipStyle" TargetType="{x:Type ToolTip}">
                <Setter Property="MaxWidth" Value="228"/>
                <Setter Property="BorderThickness" Value="0"/>
                <Setter Property="Background" Value="#FF565656"/>
                <Setter Property="FontFamily" Value="{DynamicResource BaseFontFamily}"/>
                <Setter Property="FontSize" Value="14"/>
                <Setter Property="Foreground" Value="#FFFFFFFF"/>
                <!--内容显示不全时弹出-->
                <Setter Property="Visibility" Value="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget, Converter={StaticResource TrimToolTipConverter}}"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ToolTip}">
                            <Border CornerRadius="4" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                                <TextBlock Padding="8,4" Margin="0,-1,0,0" TextWrapping="Wrap" FontFamily="{TemplateBinding FontFamily}" FontSize="{TemplateBinding FontSize}"
                                           Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}">
                                </TextBlock>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

?

?③ Converter转换器

判断TextBlock是否启用Trim属性(内容显示不下),启用了则ToolTip可视

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;

namespace ui.DataConverter
{
        /// <summary>
        /// 文字显示不下通过ToolTip提示显示
        /// </summary>
        public class TrimmedTextBlockVisibilityConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                if (value == null)
                {
                    return Visibility.Collapsed;
                }

                TextBlock textBlock = (TextBlock)value;
                bool isTrim = IsTextTrimmed(textBlock);

                if (isTrim)
                {
                    return Visibility.Visible;
                }
                else
                {
                    return Visibility.Collapsed;
                }
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }

            /// <summary>
            /// 判断当前显示的内容是否显示不全被截断
            /// </summary>
            /// <param name="textBlock"></param>
            /// <returns></returns>
            private 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.Width;
                return isTrimmed;
            }
        }
}

?

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

时间: 2024-10-27 18:33:30

WPF 文字换行TextWrapping 显示不全用省略号TextTrimming 显示不全弹提示内容ToolTip的相关文章

WPF Toolkit Chart--多Y轴显示

效果: <Window x:Class="Chart.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width=&quo

[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口

原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我们将子窗口按照ShowDialog()的方式显示出来的时候,很明显该窗口是模式化的(即主窗口等待该窗口的返回,主窗口将不相应用户输入),但如果此时将子窗口的Visibility设置成Visibility.Hidden来隐藏窗口,然后再将Visibility设置成Visibility.Visible来

WPF 精修篇 窗体唯一(Single) 显示在最前

原文:WPF 精修篇 窗体唯一(Single) 显示在最前 只运行一个窗体 并在一次点击时 显示到最前 发现用 SetForegroundWindow 并不是稳定的有效 最后使用 SetWindowPos 贴码了 public const int HWND_TOPMOST = -1; public const int HWND_NOTOPMOST = -2; protected override void OnStartup(StartupEventArgs e) { bool isNewIns

shell脚本,提示用户输入一个用户名,如果存在;显示用户UID和SHELL信息;否则,则显示无此用户;显示完成之后,提示用户再次输入;如果是quit则退出;

[[email protected] wyb]# cat tishiuser.sh #!/bin/bash #提示用户输入一个用户名,如果存在:显示用户UID和SHELL信息:否则, #则显示无此用户:显示完成之后,提示用户再次输入:如果是quit则退出; echo 'Input `quit` to quit' while : do read -p "Please Input a user:" choice [ -z $choice ] &&continue [[ &q

echo显示闪烁,screen用法及显示时间的前后.

我们这门今天学习的一些主要内容 标准的命令的格式 命令(COMMAND)  [选项(OPTIONS)-.[参数(ARGUMENTS-)] 选项:启用或者关闭命令的某个或某些功能 参数:命令作用的对象,比如文件名,用户名等 首先我们来统计一下学习到的linux的一些基础的命令 who  查询当前用户 hostname 显示主机名 lsb_release –a 显示系统版本 LSB(linux stardard base):linux 标准库 gedit 图形工具只能用于图形界面 nano 低级文本

自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示分割线.

一, 经历 1> 自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示cell 下面的分割线. 2> 尝试使用表格的separatorStyle属性,尝试失败.尝试使用 grouped 类型的表格,设置 headerview 和 footview 的代理方法或tableFooterView属性都不生效. 3> 同事定位到问题应该出在,已经设置过separatorStyle属性,接着又被系统的某些属性覆盖了,而且没有数据的单元格被系统自动创建了. 4> 同

vs 快捷键 (空格显示 绿点, Tab 显示箭头)

VS 快捷键 (空格显示 绿点, Tab 显示箭头) VS 有用的快捷键 : Ctrl + r, ctrl + w, 切换空格示.

ExtJS让被遮盖的窗体显示在最前面以及解决Ext.MessageBox提示框被TabPanel覆盖的方法【转】

ExtJS让被遮盖的窗体显示在最前面以及解决Ext.MessageBox提示框被TabPanel覆盖的方法 本文由arthinking发表于5年前 | Javascript | 暂无评论 |  被围观 14,752 views+ 一.如何让ExtJS的弹出提示信息框Ext.MessageBox或者创建的Ext.Window显示在最前面: 下面是显示一个Window的JS代码: var formPanel = MisTab1.createAddFormPanel(); var addWin = n

win7文件夹中的图片使用“XX图标”查看模式显示时,无法正常显示图片缩略图

系统: win7 详细症状描述: 进入含有图片的文件夹,选择"查看"菜单栏中的"超大图标"."大图标"等模式进行文件显示时,无法图片文件正常显示其缩略图. 问题解决: 我的电脑>>鼠标右键中点击"属性">>"控制面板\系统和安全\系统"中点击左侧"高级系统设置">>"系统属性"中点击"高级"并点击"性能