WPF——自定义ToolTip

问题

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

产生原因

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

解决办法

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

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

XML 复制代码
<Style TargetType="ToolTip">
    <Setter Property="Background" Value="White" />
    <Setter Property="Foreground" Value="Black" />
    <Setter Property="FontSize" Value="20" />
</Style>

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

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

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

XML 复制代码
<ControlTemplate x:Key="CustomToolTipTemplate" TargetType="{x:Type ToolTip}">
    <Border
        Padding="5"
        Background="White"
        BorderBrush="Black"
        BorderThickness="1"
        CornerRadius="3">
        <TextBlock
            Margin="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代码如下:

XML 复制代码
<Window
    x: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}" />-->
                            <TextBlock
                                x: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>
                    <Border
                        Padding="10"
                        Background="LightBlue"
                        BorderBrush="Black"
                        BorderThickness="1">
                        <TextBlock
                            FontFamily="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}">
            <Border
                Padding="5"
                Background="White"
                BorderBrush="Black"
                BorderThickness="1"
                CornerRadius="3">
                <TextBlock
                    Margin="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>
                <Button
                    x:Name="OpenDicom"
                    Grid.Column="0"
                    Content="&#xe662;"
                    Style="{StaticResource IconButton}"
                    ToolTip="打开DICOM文件夹" />
                <Button
                    Grid.Column="1"
                    Content="&#xe995;"
                    Style="{StaticResource IconButton}"
                    ToolTip="快速浏览" />
                <Button
                    Grid.Column="3"
                    Content="&#xe6fc;"
                    Style="{StaticResource IconButton}"
                    ToolTip="3D浏览" />
                <Button
                    Grid.Column="2"
                    Content="&#xe619;"
                    Style="{StaticResource IconButton}"
                    ToolTip="MRP浏览" />
                <Button
                    Grid.Column="4"
                    Content="&#xe61b;"
                    Style="{StaticResource IconButton}"
                    ToolTip="融合浏览" />
            </Grid>

            <Grid
                x: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博客

相关推荐
摘星编程34 分钟前
【参赛心得】HarmonyOS创新赛获奖秘籍:如何用Stage模型和声明式UI打造高分作品
ui·华为·harmonyos·鸿蒙开发·stage模型
rollingman5 小时前
WPF GroupBox 淡入淡出
wpf
yy76349666810 小时前
WPF 之 简单高效的Revit多语言支持方案
java·大数据·linux·服务器·wpf
张人玉18 小时前
WPF 触发器详解:定义、种类与示例
c#·wpf·1024程序员节·布局控件
rollingman21 小时前
WPF ComboBox 样式
wpf·combobox·textbox
知识分享小能手1 天前
uni-app 入门学习教程,从入门到精通,uni-app中uCharts组件学习((8)
vue.js·学习·ui·微信小程序·小程序·uni-app·echarts
Aevget1 天前
DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(三)
wpf·界面控件·devexpress·ui开发·1024程序员节
Aevget1 天前
界面控件Kendo UI for Angular 2025 Q3亮点 - 全新的AI编码助手
ui·界面控件·kendo ui·ui开发·1024程序员节
张人玉1 天前
WPF 核心概念笔记(补充示例)
c#·wpf·1024程序员节·布局控件
油炸自行车2 天前
【Qt】VS Code配置Qt UI插件,vscode打开Qt Designer ,vscode打开Qt*.ui文件
qt·ui·cursor·qt designer·vscode插件·trae·qt ui