Плитка Манго - удалить назад - PullRequest
20 голосов
/ 04 июля 2011

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

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

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

EDIT

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

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

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

Ответы [ 3 ]

28 голосов
/ 07 июля 2011

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

Раньше установка значения в пустую строку теперь оказывала влияние на плитку. Например, установка 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);
}
1 голос
/ 16 января 2012

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

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 голосов
/ 05 июля 2011

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

Обновление
Разве это не работает?:

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

или

tile.update(new StandardTileData());
...