【问题标题】:Setting and removing ToolTips in WPF在 WPF 中设置和删除工具提示
【发布时间】:2013-01-02 09:23:30
【问题描述】:

我遇到了一个我无法解决的问题。

我有一个 WPF 窗口,它表示 POS 应用程序中使用的物理键盘。每个物理按钮都由一个 WPF 按钮表示。用户将单击一个按钮,该按钮将打开另一个带有控件的窗口,以更改分配给它的功能。当用户将鼠标悬停在按钮上时,会显示一个工具提示,显示当前分配的功能。

设置好新设置后,我需要刷新工具提示。新工具提示正确显示,但旧工具提示不会删除。如果我使用Button.ToolTip = null,所有工具提示都会消失。如果我使用Button.ToolTip = String.Empty,我会得到一个空白提示。如果没有为按钮分配功能,我不希望显示任何工具提示。

当没有可显示的内容时,如何简单地删除/停用工具提示?

loadToolTips() 在父窗口中的 Window_Activated 事件期间触发。

代码:

private void loadToolTips()
        {
            JPOSDB db = new JPOSDB();
            SqlDataReader dr = default(SqlDataReader);
            StringBuilder tt = new StringBuilder();

            dr = db.getDR("SELECT KeyName, FunctionName, Parameter1, Parameter2 FROM KeyboardSettings JOIN KeyboardFunctions ON KeySetting = FunctionID WHERE KeyboardID = " + runTime.keyboardID);

            while (dr.Read())
            {
                foreach (Control ctrl in grdButtons.Children)
                {
                    if (ctrl.GetType() == typeof(Button))
                    {
                        Button button = new Button();
                        button = (Button)ctrl;
                        button.ToolTip = null;   <--- Causes all tool tips to disappear

                        if (button.Name.ToString() == dr[0].ToString())
                        {
                            tt.Clear();
                            tt.Append("Function: " + dr[1].ToString());

                            if (dr[2].ToString().Length > 0)
                            {
                                tt.Append(Environment.NewLine);
                                tt.Append("Value: " + dr[2].ToString());
                            }

                            if (dr[3].ToString().Length > 0)
                            {
                                tt.Append(Environment.NewLine);
                                tt.Append("Name: " + dr[3].ToString());
                            }

                            button.ToolTip = tt.ToString();                    
                        }
                    }
                }
            }

            dr.Close();
        }

【问题讨论】:

  • 如果我使用Button.ToolTip = null,所有工具提示都会消失”是什么意思?对我来说,将其设置为 null 不会影响其他的。这不就是你想要的效果吗?我可以发布我正在使用的示例代码。
  • 如果按钮被分配给数据库中的一个函数,那么工具提示会列出该函数,否则应该没有工具提示。如果我使用 Tooltip = null,那么即使分配了按钮,也没有工具提示。单步执行代码显示 button.ToolTip = tt.ToString() 已执行,但未显示工具提示。

标签: c# .net wpf


【解决方案1】:

您可以使用ClearValue 清除依赖工具提示属性。看看这是否有帮助。

 Button button = (Button)ctrl;
 button.ClearValue(Button.ToolTipProperty); 

【讨论】:

  • 这与使用 Button.ToolTip = null; 的效果相同 - 根本不显示任何工具提示。感谢您的建议,这是一个很好的了解。
  • @Kerberos42 一定是我遗漏了一些东西,你是说它正在清除每个按钮的所有工具提示吗?如果是这样,问题出在您的 foreach 循环中,因为 ClearValue 只会清除该特定按钮的工具提示。
  • 是的,它会为特定按钮清除它,但它会循环遍历所有按钮并将它们全部清除。但是,在 .ClearValue 方法之后,如果按钮名称与数据库中的字段匹配,则会设置 .ToolTip 属性。发生这种情况后,toolTip 属性仍然为空。
  • @Kerberos42 看看对应的SetValue是否有效。 button.SetValue(Button.ToolTipProperty, tt); 在我清除工具提示时设置的演示中,我仍然能够设置它。这几乎就像您正在迭代您的集合两次。
【解决方案2】:

我不确定我是否理解了这个问题,但您可以使用此行:

var s = tt.ToString();
button.ToolTip = string.IsNullOrEmpty(s) ? null : s;

如果这不能回答您的问题,请发表评论,我会删除它。

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多