SecondaryTile构造函数的ArgumentException

问题描述 投票:-3回答:1

[当我尝试在SecondaryTile中创建PinToStartAsync时,我得到了ArgumentException。哪些参数使用不正确?

    public const string LogoPath = "ms-appx:///Assets/monotone_no_bg.png";
    public static async Task<bool> PinToStartAsync(Playlist playlist, bool isPlaylist)
    {
        string tilename = playlist.Name;
        string tileid = isPlaylist ? tilename : $"{tilename}+++{playlist.Artist}";
        string path = LogoPath;
        if (playlist.DisplayItem.Source != null && await SecondaryTileFolder.TryGetItemAsync(tilename) == null)
        {
            StorageFile thumbnail = await (await GetStorageItemThumbnailAsync(playlist.DisplayItem.Source.Path)).SaveAsync(SecondaryTileFolder, tilename);
            path = thumbnail.Path;
        }
        var tile = new SecondaryTile(tileid, tilename, isPlaylist.ToString(), new Uri(path), TileSize.Default);
        // Other code
    }

    // This function saves a StorageItemThumbnail and returns a StorageFile
    public static async Task<StorageFile> SaveAsync(this StorageItemThumbnail thumbnail, StorageFolder folder, string name)
    {
        using (var stream = thumbnail.CloneStream())
        {
            var decoder = await BitmapDecoder.CreateAsync(stream);
            var softwareBitmap = await decoder.GetSoftwareBitmapAsync();
            var filename = $"{name}.png";
            var item = await folder.TryGetItemAsync(filename);
            var file = await folder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists);
            if (item == null)
            {
                using (var filestream = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, filestream);
                    encoder.SetSoftwareBitmap(softwareBitmap);
                    await encoder.FlushAsync();
                }
            }
            return file;
        }
    }

更多源代码位于底部的here

uwp win-universal-app
1个回答
0
投票

问题出在您的缩略图链接上。

可以从应用程序的程序包,应用程序的本地存储或从网络使用图像。-tile document

thumbnail.Path获取文件路径,类似于C:\Windows\...,不允许。

SaveAsync方法中,您在{name}.png中创建了LocalFolder。如果要访问此文件,则需要使用链接:ms-appdata:///local/{name}.png

最诚挚的问候。

© www.soinside.com 2019 - 2024. All rights reserved.