Я использую этот фрагмент кода для создания SecondaryTile
.
public static async Task<bool> PinToStartAsync(Playlist playlist, bool isPlaylist)
{
var tilename = playlist.Name;
var tileid = Uri.EscapeDataString(isPlaylist ? tilename : $"{tilename}+++{playlist.Artist}");
var filename = Uri.EscapeDataString(tilename);
var path = LogoPath;
if (playlist.DisplayItem.Source != null && await (await GetSecondaryTileFolder()).TryGetItemAsync(filename) == null)
{
await (await GetStorageItemThumbnailAsync(playlist.DisplayItem.Source.Path)).SaveAsync(SecondaryTileFolder, filename);
path = $"ms-appdata:///local/SecondaryTiles/{filename}.png";
}
var tile = new SecondaryTile(tileid, tilename, isPlaylist.ToString(), new Uri(path), TileSize.Default);
tile.VisualElements.ShowNameOnSquare150x150Logo = tile.VisualElements.ShowNameOnSquare310x310Logo = tile.VisualElements.ShowNameOnWide310x150Logo = true;
if (SecondaryTile.Exists(tilename)) await tile.RequestDeleteAsync();
else await tile.RequestCreateAsync();
return SecondaryTile.Exists(tilename);
}
Этот фрагмент кода отлично работает, когда имя плейлиста равно 123 или helloworld. Однако, когда я использую Unicode в tilename
, это вызывает проблемы.
Ниже приведено изображение SecondaryTile
s, которое я создал. Имя первых двух содержит несколько символов Юникода.
![enter image description here](https://i.stack.imgur.com/DxujA.png)
Таким образом, невозможно отобразить Thumbnail
, сохраненный локально, даже если я создалэти изображения успешно.
![enter image description here](https://i.stack.imgur.com/aLnzp.png)
Другая проблема с символом Unicode заключается в том, что SecondaryTile.Exists(tilename)
всегда будет возвращать false.
У меня естьзаметил проблему с юникодом, поэтому я добавил Uri.EscapeDataString
к tileid
и filename
, чтобы они были безопасны. Однако я хочу, чтобы у моих плиток были имена с символами Unicode.
Как разрешить символы Unicode в tilename
?
--- Обновление кода ---
public static async Task<bool> PinToStartAsync(Playlist playlist, bool isPlaylist)
{
var tilename = playlist.Name;
var tileid = WebUtility.UrlEncode(isPlaylist ? tilename : $"{tilename}+++{playlist.Artist}");
var filename = tileid + ".png";
var path = DefaultAlbumCoverPath;
if (playlist.DisplayItem.Source != null && !await (await GetSecondaryTileFolder()).Contains(filename))
{
await (await GetStorageItemThumbnailAsync(playlist.DisplayItem.Source.Path)).SaveAsync(SecondaryTileFolder, tileid);
path = $"ms-appdata:///local/SecondaryTiles/" + filename;
}
var tile = new SecondaryTile(tileid, tilename, isPlaylist.ToString(), new Uri(path), TileSize.Default);
tile.VisualElements.ShowNameOnSquare150x150Logo = tile.VisualElements.ShowNameOnSquare310x310Logo = tile.VisualElements.ShowNameOnWide310x150Logo = true;
if (SecondaryTile.Exists(tileid)) await tile.RequestDeleteAsync();
else await tile.RequestCreateAsync();
return SecondaryTile.Exists(tileid);
}