Подтвердить что ты не робот

Mango Application Tile - удалить обратно

Это простой вопрос и, казалось бы, простая задача, но я не могу найти никакой информации о том, как выполнить то, что мне нужно сделать.

У меня есть приложение, чья основная плитка (при закреплении) иногда должна быть стандартной односторонней плиткой по умолчанию, а иногда должна отображаться информация, отображаемая на обратной стороне плитки. Я могу добавить BackBackgroundImage, BackContent и BackTitle успешно из ScheduledActionService, но я не могу удалить их, когда они больше не требуются. Это не вторичная плитка, поэтому я не могу ее удалить и воссоздать и повторно добавить.

Кто-нибудь знает, можно ли вернуть двустороннюю черепицу обратно к одностороннему с помощью кода, и если да, то как я могу достичь этого поведения, пожалуйста?

ИЗМЕНИТЬ

Параметры, которые применяются к объекту StandardTileData, являются аддитивными - если вы укажете только заголовок, например, все остальные элементы остаются неизменными и обновляется только заголовок. Я попытался установить три параметра, которые появляются на обратной стороне плитки, до нуля и имел частичный успех. Эффект заключается в том, что фоновое изображение, текст заголовка и текст контента удалены, но плитка все еще переворачивается, чтобы показать полностью пустую обратную сторону.

ИЗМЕНИТЬ СНОВА

Итак, глядя на документацию, обрамление черепицы ведет себя по-другому по отношению к фронту. Установка обратного содержимого или backtitle на string.Empty удалит их. Там все хорошо. Однако он говорит, что "Если задано пустое URI, BackBackgroundImage не будет отображаться". Как я могу создать пустой Uri? Я попробовал новый Uri (string, Empty), но это порождает исключение из-за попытки создать пустой Uri - вот что я пытаюсь сделать.

4b9b3361

Ответ 1

ОК, я думаю, что у меня это есть, и похоже, это связано с изменением способа обработки данных плитки...

Раньше установка значения в пустую строку теперь имела бы эффект в плитке. Для примера, установка title= 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

Это работает для меня.

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

Ответ 3

Попробуйте снова установить всю плитку (все детали) на все, что было до/сейчас, но без фоновых деталей.

Обновление
Это не работает?:

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

или

tile.update(new StandardTileData());