title author date CreateTime categories
win10 uwp x:Bind 无法获得资源
lindexi
2018-08-10 19:17:19 +0800
2018-2-13 17:23:3 +0800
Win10 UWP

本文告诉大家,如果在 使用 x:Bind 转换器写在资源,而运行出现找不到资源的错误,如果解决。
在运行的时候,出现System.Runtime.InteropServices.COMException Cannot find a resource with the given key

这个问题就是资源寻找路径问题,因为 Binding 是性能比较差,他的资源是从他的自己,如果找不到,就到他的上一级,直到找到或没有。但是 x:bind 的资源寻找和 Bind 不同,他是在元素的最顶级元素和应用资源寻找。假如有一个用户控件 Foo ,那么打开他的代码,可以看到这样的代码

public global::Windows.UI.Xaml.Data.IValueConverter LookupConverter(string key)
{
if (this.localResources == null)
{
global::Windows.UI.Xaml.FrameworkElement rootElement;
this.converterLookupRoot.TryGetTarget(out rootElement);
this.localResources = rootElement.Resources;
this.converterLookupRoot = null;
}
return (global::Windows.UI.Xaml.Data.IValueConverter) (this.localResources.ContainsKey(key) ? this.localResources[key] : global::Windows.UI.Xaml.Application.Current.Resources[key]);
}

这就是说,元素资源从根元素找。页面的根元素就是页面本身,用户控件就是他自己本身,可以打开一个 xaml 页面,看到的第一个标签就是根元素。如果无法找到资源,会在应用资源寻找,如果找不到,就报错 System.Runtime.InteropServices.COMException 。应用资源是写在 App.xaml 的资源,所以如果希望使用x:bind可以获得资源,或者把资源写在根元素,或者写在应用。

假如有元素 Slider 他需要资源转换器,那么转换器需要在哪定义,请看下面的代码

                 <Slider Margin="10,10,10,10" Value="{x:Bind xx,Mode=TwoWay,Converter={StaticResource Convert}}" >
<Slider.Resources>
<local:DoubleConvert x:Name="Convert"></local:DoubleConvert>
</Slider.Resources>
</Slider>

这样写运行会错误,说未指定,因为资源找不到,因为资源寻找不是从元素开始寻找,他是从最顶级元素开始,所以如果让上面的代码可以运行,需要把资源定义在顶级元素。上面的代码可以做修改,让他可以运行

    <UserControl.Resources>
<local:DoubleConvert x:Name="Convert"></local:DoubleConvert>
</UserControl.Resources>
<Slider Margin="10,10,10,10" Value="{x:Bind xx,Mode=TwoWay,Converter={StaticResource Convert}}" > </Slider>

或者把资源写在 app.xaml 也是可以,但是写在这里的资源不会回收,会一直在内存。如果在这里写很多资源,启动速度会很慢。

win10 uwp 后台获取资源

参见:https://stackoverflow.com/a/39735867/6116637

2018-8-10-win10-uwp-x_Bind-无法获得资源的更多相关文章

  1. win10 uwp 使用 Microsoft.Graph 发送邮件

    在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...

  2. Win10 UWP开发实现Bing翻译

    微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...

  3. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  4. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

  5. win10 uwp 列表模板选择器

    本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...

  6. win10 uwp 获得元素绝对坐标

    有时候需要获得一个元素,相对窗口的坐标,在修改他的位置可以使用. 那么 UWP 如何获得元素坐标? 我提供了一个方法,可以获得元素的坐标. 首先需要获得元素,如果没有获得元素,那么如何得到他的坐标? ...

  7. win10 uwp 毛玻璃

    毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...

  8. win10 uwp 读取保存WriteableBitmap 、BitmapImage

    我们在UWP,经常使用的图片,数据结构就是 BitmapImage 和 WriteableBitmap.关于 BitmapImage 和 WriteableBitmap 区别,我就不在这里说.主要说的 ...

  9. 【广告】win10 uwp 水印图床 含代码

    本文主要是广告我的软件. 图床可以加速大家写博客上传图片的时间,通过简化我们的操作来得到加速. 在写博客的时候,我们发现,我们需要上传一张图片,需要先打开图片,然后选择本地图片,然后上传. 但是我经常 ...

  10. win10 uwp 商业游戏 1.2.1

    上一个游戏已经告诉大家如何写多个游戏,现在继续写这个无聊的游戏 希望大家在看这篇文章之前先看win10 uwp 商业游戏,在这个文章告诉了大家如何创建游戏. 修改数值 可以从上一篇的博客的游戏看到升级 ...

随机推荐

  1. Centos6.x终端中文乱码

    locale LANG LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值.类似于 LC_ALL.  LC_ALL 它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值.注意 ...

  2. laravel 分页带参数

    {{$data->appends(request()->except(['page']))->links()}}

  3. 关于JSP的淘汰问题(转)

    来源:http://1t.click/peD 大中型公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议是分开.你要是这辈子就吃java这碗饭,就不要去研究什么css,js等等. 把你的 ...

  4. MSSQL → 01:SQLServer 2008概述及安装

    据库的发展史 在人类诞生以来,就有记录数据的需求,在远古时代就有了结绳记事的故事,而随着科技的进步,我们记录数据的方式也发生了天翻地覆的变化,从效率低.规模小.不能适应信息高速发展的需要的手工或者简单 ...

  5. Directx11教程(63) tessellation学习(5)

    原文:Directx11教程(63) tessellation学习(5)        TS中生成细分后顶点的u,v,{w}坐标,我们根据控制点和u,w,{w}坐标生成新的顶点位置,在前面四边形的细分 ...

  6. C++之以分隔符的形式获取字符串

    void CConvert::Split(const std::string& src, const std::string& separator, std::vector<st ...

  7. oracle有哪些审计项

    ACTION NAME 0 UNKNOWN 1 CREATE TABLE 2 INSERT 3 SELECT 4 CREATE CLUSTER 5 ALTER CLUSTER 6 UPDATE 7 D ...

  8. 封装好的MySQL.class.php类

    封装好的MySQL.class.php类 作用:数据库操作类 <?php header('content-type:text/html;charset=utf-8'); class MySQLD ...

  9. scrapy 调用js

    依赖: PyExecJS 使用案例: from execjs import execjs text = response.xpath('//script/text()')[1].get() ctx = ...

  10. @hdu - 6687@ Rikka with Stable Marriage

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个稳定婚姻匹配问题,其中第 i 个男生与第 j 个女生之间 ...