我正面临ToolTips的问题(再次!)..
我的代码如下:
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,所以我没想到会有工具提示。
之后,如果我将鼠标悬停在按钮上,我就没有空的工具提示(如预期的那样)。它仅在值的变化期间得到空的工具提示。
你能帮忙吗?
答案 0 :(得分:0)
尝试此操作...将您的Label
属性和_label
变量更改为object
而不是string
,即将其用作字符串,但将其声明为{{1 }}。
我猜上面的问题发生是因为object
字符串实际上是null
而string.Empty
是对象类型。发生的装箱假定空字符串为ToolTip
,因此显示空工具提示而不是工具提示。但如果string.empty
是对象tyupe,则null值将表示不Label
。
如果您的案例中不允许更改ToolTip
属性的建议数据类型,那么请使用Label
绑定中的Converter
为空字符串返回null对象。
如果有帮助,请告诉我。