我又遇到了工具提示的问题。
我的代码如下: Xaml文件:<Grid>
<Button Height="23" Margin="82,0,120,105" Name="button1" VerticalAlignment="Bottom" ToolTip="{Binding Path=Label, Mode=Default}">Button</Button>
</Grid>
cs文件:
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
Parameter p1;
System.Timers.Timer aTimer;
public Window1()
{
InitializeComponent();
p1 = new Parameter();
p1.Label = "One thing";
this.DataContext = p1;
aTimer = new System.Timers.Timer();
aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed);
aTimer.Interval = 5000;
aTimer.Enabled = true;
}
void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
aTimer.Enabled = false;
p1.Label = null;
}
}
Parameter类如下:
class Parameter : System.ComponentModel.INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
#endregion
private string label = String.Empty;
public string Label
{
get { return label; }
set
{
label = value;
OnPropertyChanged(new PropertyChangedEventArgs("Label"));
}
}
private void OnPropertyChanged(PropertyChangedEventArgs propertyChangedEventArgs)
{
try
{
if (PropertyChanged != null)
{
PropertyChanged(this, propertyChangedEventArgs);
}
}
catch (Exception exc)
{
}
}
}
现在按钮被点击后,我得到工具提示"一件事",但5秒后,我得到一个空的工具提示一段时间。因为我将依赖属性设置为null,所以我没有期望任何工具提示。
之后,如果我将鼠标悬停在按钮上,我没有得到空的工具提示(如预期的那样)。只有在改变值的时候,我才会得到空的工具提示。
试试这个…将Label
属性和_label
变量更改为object
类型而不是string
,即使用它作为字符串,但将其声明为object
。
我猜上面的问题发生,因为null
字符串实际上是string.Empty
和ToolTip
是对象类型。发生的装箱假设空字符串为string.empty
,因此显示空工具提示而不是没有工具提示。但是如果Label
是对象类型,那么空值将表示没有ToolTip
。
如果在您的情况下不允许Label
属性的建议数据类型更改,那么在Label
绑定中使用Converter
来返回空字符串的空对象。
如果有帮助请告诉我