WPF 的 XAML:当工具提示文本为空白时隐藏工具提示弹出窗口

2023-12-23

我正在尝试使用 Datagrid 在 WPF 表单的单元格上设置工具提示。 这可行,但我不希望它在没有可显示的弹出文本的单元格中弹出。

我在这里看到过类似的问题,但我无法让这些解决方案发挥作用。

这是单元格模板:

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Image Source="{Binding itemType}" VerticalAlignment="Center">
            <ToolTipService.ToolTip>
                    <TextBlock Text="{Binding toolTipText}" />
            </ToolTipService.ToolTip>
        </Image>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

为了防止在空白工具提示文本上弹出,我添加了:

<DataGrid.Resources>
<Style x:Key="{x:Type ToolTip}" TargetType="{x:Type ToolTip}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToolTip}">
                <Border Background="Black" Visibility="{TemplateBinding Content, Converter={StaticResource StringToVisibilityConverter}}" >
                    <TextBlock  Width="50" FontFamily="Tahoma" FontSize="11" Text="{TemplateBinding Content}" Foreground="WhiteSmoke" Padding="2" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
</DataGrid.Resources>

StringToVisibilityConverter 定义如下:

public class StringToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
                          object parameter, CultureInfo culture)
    {
        var stringValue = String.Empty;
        if (value is System.Windows.Controls.TextBlock) stringValue = (value as System.Windows.Controls.TextBlock).Text;
        else stringValue = value as string;
        return string.IsNullOrWhiteSpace(stringValue) ?
                                         Visibility.Hidden : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType,
                              object parameter, CultureInfo culture)
    {
        return value;
    }
}

我看到的是,当文本为空白时(良好),它不会弹出工具提示,但是当有文本时,它会弹出一个黑色矩形。
如果没有工具提示的样式设置,文本框会正常弹出(除了空白文本也会弹出)。

当我删除时

Background="Black"

在边框样式上,我没有看到任何弹出内容。


您可以使用以下单元格模板使其变得更简单:

<DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Image Source="{Binding itemType}" VerticalAlignment="Center">
             <Image.ToolTip>
                <ToolTip Visibility="{Binding toolTipText, Converter={StaticResource StringToVisibilityConverter}}">
                  <Border Background="Black" >
                    <TextBlock Text="{Binding toolTipText}" />
                  </Border>
               </ToolTip>                    
            <Image.ToolTip>
          </Image>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>

转换器可以简化为:

public class StringToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return String.IsNullOrEmpty(value as string) ? Visibility.Collapsed : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 的 XAML:当工具提示文本为空白时隐藏工具提示弹出窗口 的相关文章

随机推荐

  • 使用 argparse 解析字符串

    所以我希望argparse的输入是一个字符串而不是命令行 例如 python3 some script py arg1 arg2 arg3 我想给 argparse 字符串 arg1 arg2 arg3 import argparse co
  • 从浏览器历史记录中删除当前页面

    我正在我的网站上构建一个文本编辑器 工作流程如下 In list 用户从列表中选择他们想要编辑的条目 该列表会将他们带到 edit article id 用户完成工作 然后单击 提交 服务器处理该事物 并将它们重定向回 edit artic
  • Nuxt 为所有动态路由生成带有后备文件的静态站点

    我已经在整个互联网上搜索了我的问题的答案 到目前为止还没有运气 我想要实现的目标 我有一个在通用模式下运行的 Nuxt 应用程序 它就像一个小型社交网络 用户可以在其中创建自己的个人资料并分享他们的工作 因此 我正在使用动态路由 users
  • 我如何清理 mysql 上的临时表

    我们在程序中创建临时表 并且我们不使用 mysql 的持久连接 mysql重启后 有很多临时表慢慢增加 然后innodb buffer pool size正在整理 应用程序正在该服务器上运行 CPU E3 1245 v5 3 50GHz 8
  • 如何远程检查 RedisCloud 数据库中的数据?

    我使用 Heroku 托管一个简单的 Ruby on Rails 测试应用程序来学习如何使用 Redis 我使用 RedisCloud 作为我的 Redis 服务提供商 在本地 我可以使用 Redis CLI 检查我的 Redis 数据库
  • 如何为 Webstorm 编写自己的插件?

    我想为 WebStorm 编写一个专门的插件 可以为自定义框架提供帮助 有关于如何做到这一点的教程吗 没有可用的 WebStorm 特定指南 插件的创建方式与 IntelliJ IDEA 完全相同 http confluence jetbr
  • 使用数据绑定具有多个视图类型的 Android recyclerview 适配器

    是否可以在我的适配器中创建多个视图类型 例如为我的标题添加视图 然后标题下方是一个列表 我的适配器的代码片段 public class StoreAdapter extends RecyclerView Adapter
  • Mysql:显示另一列下方的列的值

    我真的陷入了这个困境 我通过准备一条可执行语句尝试了联合 我非常清楚 SQL 不是一种用于此类任务的语言 但到目前为止 目标是创建一个原型 实际的技术实施将在稍后发生 我会解释我的要求 有一个临时表 我在其中存储名称 项目以及与该项目相关的
  • arch linux 上的 asp.net core 2.1 无法运行

    我已经在 Arch Linux 上使用 pacman 安装了最新版本的 net core sudo pacman S dotnet sdk Running dotnet info显示正确的版本 Host useful for support
  • NSURLIsExcludedFromBackupKey 在 iOS 5.1 之前崩溃

    和许多 iOS 开发者一样 我在使用 5 1 之前的系统时也遇到过应用程序崩溃的问题NSURLIsExcludedFromBackupKey 很好地描述了如何评估该线程上该键的存在 在 iOS 5 0 上使用 NSURLIsExcluded
  • ASP.Net 复选框返回“是”或“否”值(而不是 True / False)

    我正在使用 C 和 ASP Net 3 5 并尝试从复选框获取 是 否 值 而不是 True False 有没有简单的方法或者我需要做 if 语句 一定要试试这个 string doesThisWork chkBox Checked Yes
  • 我应该把 php 文件放在哪里才能让 Xampp 解析它们?

    我完成了上网本 Ubuntu 10 和 XAMPP 的安装 XAMPP 网站教程使安装变得非常容易 但让我感到茫然无措 一切正常 但我不知道将我的手写 php 文件放在哪里 经过几个小时的谷歌搜索 并试图理解文件资源管理器 我意识到我不知道
  • Eclipse CDT 和未知标签

    目前 我们正在考虑将我们的开发环境从 CodeWright 它早已被 Borland 放弃 迁移到 Eclipse 我们使用 Eclipse 进行 Perl PHP 和一些 Windows C 开发 并取得了巨大成功 然而 问题出现在我们的
  • 如何隐藏Android软键盘? [复制]

    这个问题在这里已经有答案了 我在 Linearlayout 中有两个 EditText 视图和一个按钮 在编辑文本中写入完成后 我想隐藏Android虚拟键盘 我该怎么做 您可以像这样使用 InputMethodManager 类 Inpu
  • 如何使用 Cloudflare Worker 发出异步请求(非阻塞)

    我正在编写一个 Cloudflare Worker 需要在我的原始请求完成后 ping 分析服务 我不希望它阻止原始请求 因为我不希望分析系统的延迟或故障减慢或中断请求 如何创建在原始请求完成后开始和结束的请求 addEventListen
  • 如何在 Flask send_file() 或 send_from_directory() 之后运行代码

    我有一个基于 Flask 的网站 用户可以在其中下载一些 PDF 文件 使用 Flask 可以直接实现send file http flask pocoo org docs 0 10 api flask send file and send
  • android edittext 单击按钮后移除焦点

    我有一个带有 EditText 和按钮的活动 当用户单击 EditText 时 会显示键盘 他可以输入一些文本 很好 但是 当用户单击按钮时 我希望 EditText 不再成为焦点 即键盘隐藏 直到用户再次单击 EditText 单击按钮后
  • python 3.7 的 MySQL 包

    我需要将数据保存到 MySQL 数据库中 我的问题是我找不到包 探索的解决方案 甲骨文网站 https dev mysql com downloads connector python https dev mysql com downloa
  • 在绑定到数据源的组合框中设置 SelectedItem

    List
  • WPF 的 XAML:当工具提示文本为空白时隐藏工具提示弹出窗口

    我正在尝试使用 Datagrid 在 WPF 表单的单元格上设置工具提示 这可行 但我不希望它在没有可显示的弹出文本的单元格中弹出 我在这里看到过类似的问题 但我无法让这些解决方案发挥作用 这是单元格模板