在WPF中设置和删除工具提示

时间:2013-01-02 00:01:01

标签: c# .net wpf

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

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

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

如果没有显示任何内容,我如何简单地删除/停用工具提示?

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

代码:

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();
        }

2 个答案:

答案 0 :(得分:2)

您可以使用ClearValue清除Dependency ToolTip属性。看看这是否有帮助。

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

答案 1 :(得分:0)

我不确定我是否明白这个问题,但你可以使用这一行:

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

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