芒果应用磁贴 - 移除后退按钮

20

这是一个简单的问题,看似任务也很简单,但我找不到任何关于如何完成我需要做的事情的信息。

我有一个应用程序,其主要磁贴(当固定时)有时需要是默认的单面磁贴,有时则需要在磁贴的后面显示信息。 我可以成功地从ScheduledActionService中添加BackBackgroundImage、BackContent和BackTitle,但是当它们不再需要时,我无法删除它们。因为这不是辅助磁贴,所以我无法将其删除、重新创建并重新添加。

请问是否有人知道通过代码将双面磁贴恢复为单面磁贴是否可能,如果可能的话,我该如何实现这种行为呢?

编辑

从StandardTileData对象应用的设置都是可添加的——如果只指定标题,例如,所有其他元素保持不变,只更新标题。我尝试将显示在磁贴背面的三个参数设置为null,并且取得了部分成功。效果是,背景图像、标题文本和内容文本都被删除,但磁贴仍会翻转,显示完全空白的反面。

再次编辑

那么,根据文档,磁贴背面的行为与正面不同。将BackContent或BackTitle设置为空字符串将删除它们。这方面都没问题。但是,文档中说:“如果将其设置为空URI,则不会显示BackBackgroundImage。”那我该如何创建一个空的Uri呢?我尝试使用new Uri(string,Empty) ,但会引发关于尝试创建空Uri的异常——这正是我要做的。


你是如何尝试移除它的? - Matt Lacey
我尝试将三个“Back”属性设置为null(不起作用),空字符串/URI(不起作用)。我还尝试创建2个StandardTileData对象(一个用于单面,一个用于双面),并根据需要应用它们,但也失败了。 - ZombieSheep
3个回答

28

好的,我想我已经明白了,它似乎与瓷砖数据处理的方式有关...

以前,将一个值设置为空字符串在瓷砖中没有任何影响。例如,将标题设置为string.Empty会保留现有的标题。但现在它将清空标题。这是很好的——这意味着我可以轻松地删除BackTitle和BackContent字符串。我们已经完成了一半。

现在,要摆脱BackBackgroundImage,文档说明:“如果设置为空URI,则不会显示BackBackgroundImage。”这很好,除了你无法简单地创建一个空的Uri。我让它起作用的唯一方法是将其设置为不存在的Uri值,例如

BackBackgroundImage = new Uri("obviouslyMadeUpLocation", UriKind.Relative);
我原本以为当你尝试将其应用于瓷砖时会抛出异常,但实际上并没有-它只是清除了背景图像。
因此,这就是所需的全部。所有我需要做的就是调用以下方法来取消设置这些属性,并将瓷砖恢复到原始状态。
private void ResetMyMainTile()
{
    ShellTile tile = ShellTile.ActiveTiles.First();
    StandardTileData data = new StandardTileData
    {
        BackBackgroundImage = new Uri("IDontExist",UriKind.Relative),
        BackContent = string.Empty,
        BackTitle = string.Empty
    };
    tile.Update(data);
}

2
你可以像这样创建一个空的Uri:new Uri("", UriKind.Relative)(请注意,如果将UriKind指定为Absolute,它会抛出异常)。 - hasseg

1

这个对我有效。

new Uri("Background.png", UriKind.RelativeOrAbsolute);

ShellTile TileToFind = ShellTile.ActiveTiles.First();

        if (TileToFind != null)
        {

            StandardTileData NewTileData = new StandardTileData
            {
                Title ="Status",
                BackgroundImage = new Uri("Background.png", UriKind.RelativeOrAbsolute),
                Count = 0,
                BackTitle = "",
                BackBackgroundImage = new Uri("doesntexist.png", UriKind.RelativeOrAbsolute),
                BackContent = ""
            };

            TileToFind.Update(NewTileData);
        }

0

尝试将整个瓷砖(所有细节)重新设置为之前/现在的所有内容,但不包括背景细节。

更新
这个方法不起作用吗?

ShellTile tile = ShellTile.ActiveTiles.First();
tile.Update(null);

或者

tile.update(new StandardTileData());

1
谢谢你的建议,马特,但是这些设置是累加的 - 如果省略其中一个参数,前一个参数的值将保留不变(例如,仅设置标题会保留磁贴的其他部分)。这就是为什么我认为将它们设置为null会解决问题,而且在某种程度上确实如此 - 它删除了磁贴背面的可见元素,但背面仍然显示为空磁贴。:( - ZombieSheep
我根据文档更新了我的问题。现在我正试图创建一个“空的Uri”用于背景图片,但是遇到了困难。请问有什么建议吗? - ZombieSheep
Matt Lacey - 不好意思,它们两个都不行。谢谢尝试。 - ZombieSheep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接