WPF——自定义ToolTip

embedded/2024/11/25 10:15:33/

问题

前一天制作的图标按钮,在测试的过程中发现一个问题:为图标按钮添加的提示如下图所示,它的显示效果非常差,甚至不能看清文本内容,并且其字体与颜色也不是愚所希望的。

产生原因

此是由于tooltip有一个默认的样式所导致,也就是说要解决这个问题,那么就需要按需要设置相应的样式即可。

解决办法

1.设置ToolTip样式相关属性——失败

首先,尝试直接设置tooltip的样式,如下代码所示:

<Style TargetType="ToolTip"><Setter Property="Background" Value="White" /><Setter Property="Foreground" Value="Black" /><Setter Property="FontSize" Value="20" />
</Style>

如上在窗口资源中设置了ToolTip,结果并未达到想要的效果,如下图所示:

2. 完全自定义ToolTip的显示效果,即定义其展示模板——可行

于是换个思路,那么就完全自定义ToolTip的样式得了,也就是说不仅仅只是设置它的背景色、前景色、字体等等,而是对其显示效果进行完全的自定义。经常尝试,有了下述样式代码:

<ControlTemplate x:Key="CustomToolTipTemplate" TargetType="{x:Type ToolTip}"><BorderPadding="5"Background="White"BorderBrush="Black"BorderThickness="1"CornerRadius="3"><TextBlockMargin="3"FontFamily="Arial"FontSize="12"Foreground="Black"Text="{TemplateBinding Content}"TextWrapping="Wrap" /></Border>
</ControlTemplate><Style TargetType="{x:Type ToolTip}"><Setter Property="Template" Value="{StaticResource CustomToolTipTemplate}" />
</Style>

上述代码中的TargetType="{x:Type ToolTip}"可直替换为TargetType="ToolTip"。

最后完整的UI代码如下:

<Windowx:Class="DicomReader.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:DicomReader"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="DicomReader"Width="1200"Height="800"Background="#353535"mc:Ignorable="d"><Window.Resources><Style x:Key="IconButtonTb" TargetType="TextBlock"><Setter Property="FontFamily" Value="pack://application:,,,/DicomReader;component/Fonts/#iconfont" /><Setter Property="FontSize" Value="30" /><Setter Property="Foreground" Value="White" /><Setter Property="FontWeight" Value="Bold" /></Style><Style x:Key="IconButton" TargetType="Button"><Setter Property="ToolTip" Value="{x:Null}" /><Setter Property="Background" Value="#333337" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Grid Background="{TemplateBinding Background}"><!--<Ellipse Fill="{TemplateBinding Background}" />--><TextBlockx:Name="txt"HorizontalAlignment="Center"VerticalAlignment="Center"Style="{StaticResource IconButtonTb}"Text="{TemplateBinding Content}" /></Grid></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="Grid"><Setter Property="Background" Value="#252525" /></Style><!--  定义Popup的Style  --><!--<Style TargetType="Popup"><Setter Property="PopupAnimation" Value="Fade" /><Setter Property="AllowsTransparency" Value="True" /><Setter Property="Placement" Value="MousePoint" /><Setter Property="StaysOpen" Value="False" /><Setter Property="Child"><Setter.Value><BorderPadding="10"Background="LightBlue"BorderBrush="Black"BorderThickness="1"><TextBlockFontFamily="Arial"FontSize="14"FontWeight="Bold"Foreground="DarkBlue"Text="This is a popup!"TextWrapping="Wrap" /></Border></Setter.Value></Setter></Style>--><!--  定义ToolTip的ControlTemplate  --><ControlTemplate x:Key="CustomToolTipTemplate" TargetType="{x:Type ToolTip}"><BorderPadding="5"Background="White"BorderBrush="Black"BorderThickness="1"CornerRadius="3"><TextBlockMargin="3"FontFamily="Arial"FontSize="12"Foreground="Black"Text="{TemplateBinding Content}"TextWrapping="Wrap" /></Border></ControlTemplate><Style TargetType="ToolTip"><Setter Property="Template" Value="{StaticResource CustomToolTipTemplate}" /></Style></Window.Resources><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="4*" /></Grid.ColumnDefinitions><StackPanel Orientation="Vertical"><Grid Height="50"><Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><Buttonx:Name="OpenDicom"Grid.Column="0"Content="&#xe662;"Style="{StaticResource IconButton}"ToolTip="打开DICOM文件夹" /><ButtonGrid.Column="1"Content="&#xe995;"Style="{StaticResource IconButton}"ToolTip="快速浏览" /><ButtonGrid.Column="3"Content="&#xe6fc;"Style="{StaticResource IconButton}"ToolTip="3D浏览" /><ButtonGrid.Column="2"Content="&#xe619;"Style="{StaticResource IconButton}"ToolTip="MRP浏览" /><ButtonGrid.Column="4"Content="&#xe61b;"Style="{StaticResource IconButton}"ToolTip="融合浏览" /></Grid><Gridx:Name="Cases"Height="Auto"Margin="0,10"><!--<Button Background="Aqua"><TextBlock Text="&#xe608;" /></Button>--></Grid></StackPanel><Grid Grid.Column="1" /></Grid>
</Window>

参考

WPF——ICON按钮制作-CSDN博客


http://www.ppmy.cn/embedded/140355.html

相关文章

信号控制技巧

信号控制技巧 • 检查是否真正需要全局复位。 • 避免异步控制信号。 • 保持时钟、使能和复位信号极性一致。 • 勿将置位和复位编码到同一寄存器元件中。 • 如果确实需要异步复位&#xff0c;应务必与异步复位的解除保持同步。 掌握推断的结果 您的代码最终必须映…

阿里云VLDB顶会论文在Async-fork在redis中应用解读

1.背景 该论文主要是解决redis在持久化&#xff08;RDB&#xff0c;AOD&#xff09;以及主从全量同步时都会调用fork来创建子进程获取内存快照&#xff0c;由于fork需要复制父进程页表&#xff0c;此时如果内存比较大&#xff0c;也就是我们常说的大key过多&#xff0c;就会导…

一次成功尝试:旧电脑通过网线,连接带无线网卡电脑上外网

一 引言 最近&#xff0c;为一台旧电脑安装了ubuntu系统&#xff0c;需要连网安装一些软件。 但是电脑太旧了&#xff0c;也没有无线网卡&#xff0c;怎么办呢&#xff1f; 手头还有另外一台笔记本电脑&#xff0c;带无线网卡&#xff0c;于是&#xff0c;想尝试通过笔记本电…

游戏引擎学习第22天

移除 DllMain() 并成功重新编译 以下是对内容的详细复述与总结&#xff1a; 问题和解决方案&#xff1a; 在编译过程中遇到了一些问题&#xff0c;特别是如何告知编译器不要退出程序&#xff0c;而是继续处理。问题的根源在于编译过程中传递给链接器的参数设置不正确。原本尝试…

高级网络安全——移动IP (GSM认证和密钥协议)(week6)

文章目录 一、前言二、重点概念移动IP认证移动IP认证的重要性移动IP认证扩展安全参数索引(SPI)认证字段计算认证标签防重放机制移动系统安全移动环境移动系统安全的关键问题GSM认证与密钥协商GSM认证与密钥协商的步骤步骤0 - 设置步骤1步骤2步骤3步骤4步骤5步骤6问题探讨一、…

第十章JavaScript的应用课后习题

1.在网页中显示一个工作中的“数字时钟”。 参考代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>动态时钟</title><style>.all{width: 600px;height: 300px;margin: 100px auto;text-align…

JavaScript中的this指向绑定规则(超全)

JavaScript中的this指向绑定规则&#xff08;超全&#xff09; 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中&#xff0c;几乎都有this这个关键字&#xff08;Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面…

Puppeteer 和 Cheerio 在 Node.js 中的应用

Puppeteer 和 Cheerio 在 Node.js 中的应用 引言 在现代 Web 开发中&#xff0c;自动化测试、数据抓取和页面分析是常见的需求。Node.js 提供了丰富的工具和库来满足这些需求。本文将介绍两个在 Node.js 中常用的库&#xff1a;Puppeteer 和 Cheerio&#xff0c;它们分别用于…