尽管调用提供程序

时间:2017-07-10 16:05:35

标签: uwp windows-runtime

我有一个带有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始终显示旧值:

enter image description here

enter image description here

我可以理解结果是否总是被缓存,但如果是这样的话,为什么每次在第一个位置调用传递对象的.ToString()方法?由于无论如何都要计算结果,显然也应该使用它。

我想在回调中我可以删除工具提示然后用新值重新创建它,但这似乎是一种相当迂回的方法。

1 个答案:

答案 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);