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 使用的标记的方法

定义一个标记扩展需要满足下面条件

下面我简单写一个多语言支持的标记扩展,在界面使用多语言的时候我期望使用这个方式写多语言

        <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.csNullableBool.cs 如果有任何想法欢迎在 WindowsCommunityToolkit 讨论

本文使用的源代码放在 github 欢迎评论

Making the case for XAML Markup Extensions – pedrolamas.com

2019-4-10-win10-uwp-自定义标记扩展的更多相关文章

  1. WPF:实现自定义标记扩展

    标记扩展使用{标记扩展类 参数}语法,如: <TextBlock Text={x:Null}/> 为什么x:Null就可以返回一个null值呢? 其实在System.Windows.Mar ...

  2. [No000012C]WPF(4/7)类型转换器和标记扩展[译]

    介绍 之前讨论了WPF的基础架构,然后逐步开始学习布局面板,转换,介绍了不同的控件,容器,UI转换等.在这篇文章中,我将讨论每个创建XAML应用前的开发人员应该了解的关于XAML最重要的东西. 标记扩 ...

  3. wpf中xaml的类型转换器与标记扩展

    原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...

  4. WPF,Silverlight与XAML读书笔记(3) - 标记扩展

    hystar的.Net世界 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 103  文章- 0  评论- 107  WPF,Silverlight与XAML读书笔记(3) - 标记扩展   说 ...

  5. WPF整理-自定义一个扩展标记(custom markup extension)

    "Markup extensions are used to extend the capabilities of XAML, by providing declarativeoperati ...

  6. 【Win10 UWP】URI Scheme(一):Windows Store协议的解析和使用

    协议是Windows Phone和Windows Store应用的一个重要特点,可以做到在不同应用之间进行互相呼起调用.小小协议,学问大着呢.我打算写几篇关于协议在UWP中使用的文章. 这一讲的主要对 ...

  7. Xamarin.Forms移动开发系列5 :XAML标记扩展

    摘要 本文主要讲述Xamarin.Forms中XAML的标记扩展. 前言 在Xamarin.Forms移动开发系列4 :XAML基础一文中提到过XAML标记扩展,本文将对标记扩展进行更深入的了解. 大 ...

  8. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

  9. 自定义和扩展 SharePoint 2010 Server 功能区

    了解构成 SharePoint 2010 服务器功能区的组件以及如何通过演练两个功能区自定义项方案来自定义功能区. 适用范围: Microsoft SharePoint Foundation 2010 ...

随机推荐

  1. 51nod1196 字符串的数量

    用N个不同的字符(编号1 - N),组成一个字符串,有如下要求:(1) 对于编号为i的字符,如果2 * i > n,则该字符可以作为结尾字符.如果不作为结尾字符而是中间的字符,则该字符后面可以接 ...

  2. 关于iOS7的一切相关的资料

    http://www.cocoachina.com/special/ios7/ PreviousNext 作为的用户,您可能需要了解 WWDC大会以及iOS 7的新界面 CocoaChina WWDC ...

  3. Leetcode744.Find Smallest Letter Greater Than Target寻找比目标字母大的最小字母

    给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母. 数组里字母的顺序是循环的.举个例子,如果目标字母target = 'z' 并且有 ...

  4. 获取登录的地点和ip地址的js

    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> <script>doc ...

  5. 将nginx搜集到的日志通过flume转到hive

    背景介绍: Nginx为app打点数据,打点日志每小时滚动一次.目录结构如下 文件中的数据如下( cat -A 2019072414r.log 后的结果,-A为显示隐形的符号,下方^A为指定的分隔符. ...

  6. VS2008中为控件添加属性(比如前景色,背景色)

    VS2008中没有classwizard,但不要伤心,到了VS2010,classwizard又回来了. 可以参照这篇博客:http://blog.csdn.net/candyliuxj/articl ...

  7. Java练习 SDUT-2733_小鑫の日常系列故事(二)——石头剪子布

    小鑫の日常系列故事(二)--石头剪子布 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 小鑫在上幼儿园的时候,喜欢跟小伙 ...

  8. Gartner:阿里云位列全球云数据库市场份额前三,数据库未来需上云

    近日,国际权威研究机构Gartner发布 <The Future of the Database Management System (DBMS) Market Is Cloud>报告,鲜 ...

  9. JavaWeb登录、注销、退出、记住用户名和密码

    应该是保存在Cookie里,session是放在服务器的内存里的.在用户关闭了网页窗口后,session就清空了.而Cookie是保存在用户的IE临时文件夹中的,再次登录时,读取其中的值传给服务器. ...

  10. Java练习 SDUT-1230_平方和与立方和

    平方和与立方和 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇 ...