Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中设置和删除工具提示_C#_.net_Wpf - Fatal编程技术网

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

C# 在WPF中设置和删除工具提示,c#,.net,wpf,C#,.net,Wpf,我有个问题,我就是想不出来 我有一个WPF窗口,它表示POS应用程序中使用的物理键盘。每个物理按钮都由一个WPF按钮表示。用户将单击一个按钮,打开另一个带有控件的窗口,以更改分配给它的功能。当用户将鼠标悬停在按钮上时,将显示一个工具提示,显示当前分配的功能 设置新设置后,我需要刷新工具提示。新工具提示显示正确,但旧工具提示不会删除。如果我使用Button.ToolTip=null,所有工具提示都会消失。如果我使用Button.ToolTip=String.Empty,我会得到一个空白的提示。如果

我有个问题,我就是想不出来

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

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

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

loadToolTips()在父窗口中的窗口激活事件期间激发

代码:

private void loadToolTips()
{
JPOSDB=新的JPOSDB();
SqlDataReader dr=默认值(SqlDataReader);
StringBuilder tt=新的StringBuilder();
dr=db.getDR(“从KeyboardSettings中选择KeyName、FunctionName、Parameter1、Parameter2在KeySetting=FunctionID中加入KeyboardFunctions,其中KeyboardID=“+runTime.KeyboardID”);
while(dr.Read())
{
foreach(grdButtons.Children中的控件ctrl)
{
if(ctrl.GetType()==typeof(按钮))
{
按钮按钮=新按钮();
按钮=(按钮)ctrl;
button.ToolTip=null;0)
{
tt.Append(Environment.NewLine);
att.Append(“值:+dr[2].ToString());
}
如果(dr[3].ToString().Length>0)
{
tt.Append(Environment.NewLine);
att.Append(“名称:”+dr[3].ToString());
}
button.ToolTip=tt.ToString();
}
}
}
}
Close博士();
}
您可以使用清除从属工具iProperty。看看这是否有帮助

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

我不确定我是否理解这个问题,但你可以用这句话:

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

如果这不能回答您的问题,请留下评论,我将删除它。

您所说的“如果我使用Button.ToolTip=null,所有工具提示将消失”是什么意思?对我来说,将其设置为null不会影响其他值。这不是你想要的效果吗?我可以发布我正在使用的示例代码。如果按钮被分配给DB中的某个函数,那么工具提示将列出该函数,否则应该没有工具提示。如果使用Tooltip=null,则即使指定了按钮,也不会有工具提示。单步执行代码会显示button.ToolTip=tt.ToString(),但不会显示工具提示。这与使用
button.ToolTip=null的效果相同-根本不显示任何工具提示。谢谢你的建议,知道这个很好。@Kerberos42我肯定遗漏了什么,你是说它正在清除每个按钮的所有工具提示吗?如果是这样的话,问题就出在foreach循环中,因为ClearValue只清除特定按钮的工具提示。是的,它清除特定按钮的工具提示,但它循环所有按钮并清除所有按钮。但是,在.ClearValue方法之后,如果按钮名称与数据库中的字段匹配,则会设置.ToolTip属性。发生这种情况后,工具提示属性仍然为空。@Kerberos42请查看相应的设置值是否有效<代码>按钮.SetValue(按钮.ToolTipProperty,tt)在我清除工具提示时设置的演示中,我仍然能够设置它。这几乎就像是在对集合进行两次迭代。
var s = tt.ToString();
button.ToolTip = string.IsNullOrEmpty(s) ? null : s;