我有一个带有UI元素的UWP应用程序,我将其称为ToolTipService.SetToolTip
并传入一个对象,该对象调用回调以确定.ToString()
的结果为值:
ToolTipService.SetToolTip(Status, new DynamicString(() =>
{
var remaining = time - DateTimeOffset.UtcNow;
var tooltipText = remaining.Humanize(precision: 5, minUnit: remaining.Hours > 1 ? TimeUnit.Minute : TimeUnit.Second);
return tooltipText;
}));
每次我将鼠标悬停在相关元素上时,都会调用此回调并计算并返回新的工具提示文本值。尽管如此,UI始终显示旧值:
我可以理解结果是否总是被缓存,但如果是这样的话,为什么每次在第一个位置调用传递对象的.ToString()
方法?由于无论如何都要计算结果,显然也应该使用它。
我想在回调中我可以删除工具提示然后用新值重新创建它,但这似乎是一种相当迂回的方法。
答案 0 :(得分:0)
虽然,为了我自己的理智,我仍然更喜欢一种解决方案,阻止将.ToString()
调用传递的对象缓存到ToolTipService.SetToolTip(xxx, value)
,这就是我现在正在使用的:
var tooltip = new ToolTip();
var tooltipText = new TextBlock();
tooltip.Content = tooltipText;
tooltip.Opened += (s, e) =>
{
var remaining = time - DateTimeOffset.UtcNow;
tooltipText.Text = remaining.Humanize(precision: 5, minUnit: remaining.Hours >= 1 ? TimeUnit.Minute : TimeUnit.Second);
};
ToolTipService.SetToolTip(Status, tooltip);