尽管调用了提供者,ToolTipService 仍使用缓存的值

ToolTipService using cached values despite calling provider

我有一个带有 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() 方法首先每次都被调用?无论如何都要计算结果,显然也应该使用它。

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

虽然,为了我自己的理智,我仍然更喜欢一种解决方案,它可以防止将传递对象的 .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);