Uwp 尽管调用了提供程序,但仍使用缓存值的ToolTipService

Uwp 尽管调用了提供程序,但仍使用缓存值的ToolTipService,uwp,windows-runtime,Uwp,Windows Runtime,我有一个UWP应用程序,它有一个UI元素,我为该元素调用了ToolTipService.SetToolTip,并传入了一个对象,该对象调用回调来确定.ToString()的结果作为值: ToolTipService.SetToolTip(Status, new DynamicString(() => { var remaining = time - DateTimeOffset.UtcNow; var tool

我有一个UWP应用程序,它有一个UI元素,我为该元素调用了
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()
方法?由于无论如何都要计算结果,显然也应该使用它


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

尽管出于理智考虑,我仍然希望有一种解决方案能够阻止对传递给
ToolTipService.SetToolTip(xxx,value)
的对象的
.ToString()
调用进行缓存,但我现在使用的是:

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