我遇到了一個我無法想象的問題。設置和刪除WPF中的工具提示
我有一個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不會影響其他的。這不是你尋求的效果嗎?我可以發佈我正在使用的示例代碼。 – Mir
如果將按鈕分配給數據庫中的某個功能,則工具提示會列出該功能,否則應該沒有工具提示。如果我使用Tooltip = null,那麼即使按鈕已分配,也沒有工具提示。單步執行代碼顯示button.ToolTip = tt.ToString()被執行,但工具提示不顯示。 – Kerberos42