如何根据本地存储中的图像更改Windows 8磁贴

时间:2012-12-15 12:55:12

标签: c# windows microsoft-metro

我正在编写一个Windows 8应用程序,它应该根据本地存储的图像更改图块。

首先,我将网址中的图像存储到本地存储中:

         const string fileName = "test.jpg";
        StorageFile storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

        using (IRandomAccessStream storageStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite))
        {
            HttpClient client = new HttpClient();
            Stream imageStream = await client.GetStreamAsync("http://suntsu.smugmug.com/Public/NikonTest/i-5L8JLTz/0/Th/20120124_Nikon_Macro_2-Th.jpg");

            using (var memoryStream = new MemoryStream())
            {
                imageStream.CopyTo(memoryStream);
            }
            await RandomAccessStream.CopyAndCloseAsync(imageStream.AsInputStream(), destination: storageStream.GetOutputStreamAt(0));
        }

这有效,我可以通过以下方式访问该文件:

  //var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri( "ms-appdata:///local/" + fileName));

现在我想将此图片添加为我的新版本:

            XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideImageAndText01);
        XmlNodeList tileTextElements = tileXml.GetElementsByTagName("text");
        tileTextElements.Item(0).AppendChild(tileXml.CreateTextNode(fileName));
        XmlNodeList tileImageAttributes = tileXml.GetElementsByTagName("image");
        tileImageAttributes[0].Attributes[1].NodeValue = "ms-appdata:///local/" + fileName;

现在的问题是没有任何反应,我的瓷砖中没有显示任何图像。

我想问题与“ms-appdata:/// local /”+ fileName; 有关,因为如果我使用代码从我的app文件夹加载文件,它就可以了。的 “MS-APPX:///images/graySquare.png”;

问题: 是“ms-appdata:/// local /”+ fileName; 错误,以便从本地存储设置图像链接?它必须如何完成?

编辑:我忘了添加应该添加新创建的图块的代码。

                ScheduledTileNotification tileNotification = new ScheduledTileNotification(tileXml, DateTimeOffset.UtcNow.AddSeconds(count));
            TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true);
            TileUpdateManager.CreateTileUpdaterForApplication().AddToSchedule(tileNotification);

编辑: 是否有可能验证“ms-appdata:///local/myimage.jpg”以确保此uri正确,并且图像存在?

1 个答案:

答案 0 :(得分:1)

我找到了。 问题不在于道路。 “ms-appdata:///local/myimage.jpg”是正确的。 写入文件的代码不正确,因此只有0字节的图像。 这不会导致任何异常或消息,但磁贴未更新。