2019-4-10-win10-uwp-自定义标记扩展
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp 自定义标记扩展
|
lindexi
|
2019-04-10 09:46:13 +0800
|
2019-04-10 09:23:31 +0800
|
Win10 UWP
|
在 UWP 使用的 Binding 或 StaticResource 这些都是标记扩展,在 Windows 10 Fall Creators Update 版本号是 10.0.16299.0 和以上支持在 UWP 自定义标记扩展,也就是定义了一个可以在 xaml 使用的标记的方法
定义一个标记扩展需要满足下面条件
- 继承 MarkupExtension 类
- 重写 ProvideValue 返回值
- 在类上面添加MarkupExtensionReturnTypeAttribute 指定返回的类
- 命名后缀是 Extension 字符串
- 有没有参数的构造函数
下面我简单写一个多语言支持的标记扩展,在界面使用多语言的时候我期望使用这个方式写多语言
<TextBlock Text="{local:Lang Key=lindexi}" />
于是我需要创建多语言的类
public class LangExtension : MarkupExtension
多语言返回的是字符串,所以标记 MarkupExtensionReturnTypeAttribute 同时设置返回的类
[MarkupExtensionReturnType(ReturnType = typeof(string))]
public class LangExtension : MarkupExtension
添加一个静态字典,用于存放多语言字符串
public static Dictionary<string, string> LangList { set; get; } = new Dictionary<string, string>();
添加一个属性,用于绑定的时候输入,从上面代码可以知道我需要一个名为 key 的字符串属性
public string Key { get; set; }
重写 ProvideValue 方法,根据用户输入的 Key 返回对应的多语言
protected override object ProvideValue()
{
if (LangList.TryGetValue(Key, out var value))
{
return value;
} return Key;
}
整个 LangExtension 代码请看
[MarkupExtensionReturnType(ReturnType = typeof(string))]
public class LangExtension : MarkupExtension
{
public string Key { get; set; } protected override object ProvideValue()
{
if (LangList.TryGetValue(Key, out var value))
{
return value;
} return Key;
} public static Dictionary<string, string> LangList { set; get; } = new Dictionary<string, string>();
}
此时就可以在 xaml 使用定义的标记扩展了
<TextBlock Text="{local:LangExtension Key=lindexi}" />
<TextBlock Text="{local:Lang Key=lindexi}" />
在使用的时候可以忽略 Extension 字符串
在 WindowsCommunityToolkit 也有两个定义,请看 OnDevice.cs 和 NullableBool.cs 如果有任何想法欢迎在 WindowsCommunityToolkit 讨论
本文使用的源代码放在 github 欢迎评论
2019-4-10-win10-uwp-自定义标记扩展的更多相关文章
- WPF:实现自定义标记扩展
标记扩展使用{标记扩展类 参数}语法,如: <TextBlock Text={x:Null}/> 为什么x:Null就可以返回一个null值呢? 其实在System.Windows.Mar ...
- [No000012C]WPF(4/7)类型转换器和标记扩展[译]
介绍 之前讨论了WPF的基础架构,然后逐步开始学习布局面板,转换,介绍了不同的控件,容器,UI转换等.在这篇文章中,我将讨论每个创建XAML应用前的开发人员应该了解的关于XAML最重要的东西. 标记扩 ...
- wpf中xaml的类型转换器与标记扩展
原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...
- WPF,Silverlight与XAML读书笔记(3) - 标记扩展
hystar的.Net世界 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 103 文章- 0 评论- 107 WPF,Silverlight与XAML读书笔记(3) - 标记扩展 说 ...
- WPF整理-自定义一个扩展标记(custom markup extension)
"Markup extensions are used to extend the capabilities of XAML, by providing declarativeoperati ...
- 【Win10 UWP】URI Scheme(一):Windows Store协议的解析和使用
协议是Windows Phone和Windows Store应用的一个重要特点,可以做到在不同应用之间进行互相呼起调用.小小协议,学问大着呢.我打算写几篇关于协议在UWP中使用的文章. 这一讲的主要对 ...
- Xamarin.Forms移动开发系列5 :XAML标记扩展
摘要 本文主要讲述Xamarin.Forms中XAML的标记扩展. 前言 在Xamarin.Forms移动开发系列4 :XAML基础一文中提到过XAML标记扩展,本文将对标记扩展进行更深入的了解. 大 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- 自定义和扩展 SharePoint 2010 Server 功能区
了解构成 SharePoint 2010 服务器功能区的组件以及如何通过演练两个功能区自定义项方案来自定义功能区. 适用范围: Microsoft SharePoint Foundation 2010 ...
随机推荐
- Linux与Unix shell编程指南(完整高清版).pdf
找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...
- oracle 数据库安全审计
Oracle的审计机制是用来监视用户对ORACLE数据库所做的各种操作. 在缺省情况下,系统的审计功能是关闭的.可以在INIT.ORA参数文件中将参数AUDIT_TRAIL设置为正整数来激活. 审计功 ...
- linux CentOs 7.4 64位 系统下 nuxt部署 、nginx 安装、node环境及软连接,pm2软连接
一.nginx安装 1.安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2 ...
- 解决 win10 pycurl安装出错 Command "python setup.py egg_info" failed with error code 10 编译安装包 安装万金油
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/yexiaohhjk/article/de ...
- 2019-9-2-win10-uwp-随着数字变化颜色控件
title author date CreateTime categories win10 uwp 随着数字变化颜色控件 lindexi 2019-09-02 12:57:38 +0800 2018- ...
- 用select提取List元素自身序号
var cs = currentCitys.Select((c, i) => new { id = c.CITY_ID, 序号 = (i + 1).ToString(), 城市类型 = c.IS ...
- C++讲课总结 标签: c++总结 2015-02-28 14:48 671人阅读 评论(25) 收藏
昨天老师算是给串了一本C++ 的课本,根据自己的理解,赶紧记录一下,也好作为自己学习时候的根据. C++编程简介:每本讲语言的书,第一章总是简介,内容无非是发展历史,语言特色等东西,专业的东西不多,都 ...
- 【codeforces 798D】Mike and distribution
[题目链接]:http://codeforces.com/contest/798/problem/D [题意] 让你选一个下标集合 p1,p2,p3..pk 使得2*(a[p1]+a[p2]+..+a ...
- 模板—中国剩余定理+拓展GCD
int exgcd(int a,int b,int &x,int &y) { ) { x=,y=; return a; } int gcd=exgcd(b,a%b,x,y); int ...
- C++第三次作业:友元类
友元类 将数据与处理数据的函数封装在一起,构成类,即实现了数据的共享又实现了隐藏,无疑是面向程序设计的一大优点,但是封装并不总是完美的,一旦需要涉及到一个类的两个对象的数据处理问题该怎么办?无论是设计 ...