UAP开发错误之The given System.Uri cannot be converted into a Windows.Foundation.Uri(windows phone背景更换)

今天博主在开发一款windows phone应用时,希望实现app背景的更换,思路很简单。使用ApplicationDataContainer容器存储我的图片路径,每次载入应用时读取这个路径以决定我用什么背景,然后在更换背景时改变这个容器的值就好了。相关代码如下:

       ApplicationDataContainer localsetting = ApplicationData.Current.LocalSettings;

            localsetting.Values["Background"] = "ms-appx:///Assets/Images/background2.jpg";

       Button btn = sender as Button;
            if(string.Equals(btn.Tag,"1"))
            {
                localsetting.Values["Background"] = "ms-appx:///Assets/Images/background1.jpg";
            }
            else if(string.Equals(btn.Tag,"2"))
            {
                localsetting.Values["Background"] = "ms-appx:///Assets/Images/background2.jpg";
            }
            else
            {
                localsetting.Values["Background"] = "ms-appx:///Assets/Images/background3.jpg";
            }

在载入应用时,把Grid的背景用容器路径所对应的图片刷一下,其中的ContentPanel是一个Grid:

       if (!localsetting.Values["Background"].Equals(null))
            {
                string strImageUri = localsetting.Values["Background"].ToString();
                if (!string.IsNullOrEmpty(strImageUri))
                {
                    ImageBrush imageBrush = new ImageBrush();
                    imageBrush.ImageSource = new BitmapImage(new Uri(strImageUri, UriKind.RelativeOrAbsolute));
                    ContentPanel.Background = imageBrush;
                }
            }

值得注意的是:我的图片放在工程中下面的Assets文件夹下面的Image文件夹中,一开始我容器中存放的值是类似这样的:

 localsetting.Values["Background"] = "Assets/Images/background2.jpg";

然后就会报错:The given System.Uri cannot be converted into a Windows.Foundation.Uri,现在的Uri定义好像已经修改,具体参考:https://msdn.microsoft.com/zh-cn/library/windows/apps/windows.foundation.uri(v=vs.85).aspx

我的解决方法就是在路径前面加个ms-appx:///就行了,注意,这是个绝对路径,UriKind应该设置为UriKind.RelativeOrAbsolute或者UriKind.Absolute

时间: 2024-10-10 15:17:54

UAP开发错误之The given System.Uri cannot be converted into a Windows.Foundation.Uri(windows phone背景更换)的相关文章

博客园客户端UAP开发随笔 -- 让自己的App连接世界:WinRT中的微博分享

近年来社交app可谓红红火火,大家每天发微博,分享到朋友圈也是不亦乐乎.我们的Universal应用自然也希望加入社交分享的功能.然而国内主流的社交平台微博和微信还没有推出适用于Universal应用的SDK,怎么办呢?当然敲碗等开饭也是办法,另一方面我们也可以自己做一些努力.今天我们就想分享一下我们在Universal应用中实现分享到微博功能上的探索. 准备 想要分享到微博,先得注册成为微博开发者.我们在http://open.weibo.com/上注册好开发者账号,建立个测试应用,就可以拿到

编译器错误消息: CS0234: 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)

署名:冯兵 今天我遇上一个问题:编译器错误消息: CS0234: 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?). 让我烦恼了很长一段时间,怎么调试也不知道错在哪,后来问师兄才知道错在哪. 起因:修改一个功能模块的代码,怕影响到其他功能模块的功能实现,所以我新建了一个区域,把要修改模块的相关代码都复制过去,把带波浪线的提示都修改完后,   运行就出现这个错误. 解决方案:找到复制前和复制后的视图文件夹下的文件名为“Web.confi

错误描述:请求“System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限已失败

错误描述:请求“System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限已失败. 解决办法:在配置文件web.config中<trust></trust>节点,把<trust level="WSS_Minimal" originUrl=""

C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。

C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏.解决方案 报错 dll文件应该是C++写的.封装了之后供我的C#程序调用,结果就提示了错误:尝试读取或写入受保护的内存.这通常指示其他内存已损坏.错误类型为:System.AccessViolationException. 解决办法 在C#中调用别人的DLL的时候有时候出现 尝试读取或写入受保护的内存 .这通常指示其他内存已损坏. 在传值的时候还是用指针,再在C#中做转换就好了. [DllImport("APPLISTCC.dll&qu

常见的Android开发错误及解决办法

9个常见的Android开发错误及解决办法: 1. 如果你的项目的R文件不见的话,可以试下改版本号在保存,R文件不见一般都是布局文本出错导致. 2. 布局文件不可以有大写字母 3. 抛出如下错误WARNING: Application does not specify an API level requirement!, 是由于没有指定users sdk的缘故,修改AndroidManifest.xml文件. 加入:<uses-sdkandroid:minSdkVersion="8″>

开发错误记录8:Unable?to?instantiate?application?com

开发错误记录8:Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication 这是因为在Android Studio2 新的即时运行功能 导致的,因为,这个功能只在更改布局文件时不用重新编译! 把这个功能关闭即可! 在Android 6.0的新增了权限管理机制,所以在调用相应的权限,要重新申请,在6.0以下的版本,不存在,否则在操作相机,联系人,打电话等,会报如下的错误 :(网上有很多封装好

开发错误记录2 .MainActivity (server)&#39; ~ Channel is unrecoverably broken and will be disposed!

刚在调试android程序报 导致直接崩了 Consumer closed input channel or an error occurred.  events=0x9 .MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 一直找不到原因,后来在网络上找了各种解决方法都不管用!后来是我的应用开了硬件加硬,导致的! 原因是用webview加截网页来做的应用,当时就对webview进行了优化,

开发错误11:Configuration with name ‘default’ not found

开发错误11:Configuration with name 'default' not found 今天在导入一个sdkdemoapp3.0项目时,发现project build.gradle 与module build.gradle.内容也在一个build.gradle里面, 结果make project下 就报如下错: Configuration with name 'default' not found 说明,没找到默认的module  build.gradle; 所以要在setting

编译器错误消息: CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)

1:新建mvc 空程序 ------------------- 编译器错误消息: CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?) ------------------- 2:解决办法  ------------------- 复制程序集 System.Web.Mvc (D:\OneDrive\PrivateCode\MVCDemo\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\S