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. Linux之软件包安装管理

    软件包分类: 源码包:脚本安装包(源C代码) 二进制包(rpm包,系统默认包) 源码包 1.源码包优点 开源,如果有足够的能力,完全可以修改源代码 可以自己选择所需要安装的功能 软件是编译安装,所以更 ...

  2. 19-2 from和modelform的用法和介绍

    一 form 1. form的作用 1. 生成HTML代码 2. 帮我们做数据有效性的校验 3. 保留上次输入内容,显示错误提示 2. form组件校验数据有效性   1. 内置的校验规则 1. re ...

  3. 神舟mini pcs-b wifi-bt 驱动

    最新mini pcs ssd硬盘版 安装win10后蓝牙设备找不到,显示usb获取设备符失败, 卸载wifi驱动,安装以下驱动,两个链接应该都可以. TW: https://downloadcente ...

  4. PHP实现打印出库单,有没有实现过?

    https://mp.weixin.qq.com/s/X3JldplICRq7KR0HNFcpuw 背景 有时候你在实现一个出库订单之类的功能模块,这里也有可能要你的站点也实现相应的打印出库单预览,今 ...

  5. 洛谷4137 mex题解 主席树

    题目链接 虽然可以用离线算法水过去,但如果强制在线不就gg了. 所以要用在线算法. 首先,所有大于n的数其实可以忽略,因为mex的值不可能大于n 我们来设想一下,假设已经求出了从0到n中所有数在原序列 ...

  6. poj 2184 Cow Exhibition(01背包)

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10882   Accepted: 4309 D ...

  7. linux环境变量设置和默认执行语句设置

    环境变量设置 1.export export ORACLE_HOME=/usr/local/instantclient_12_2export PATH=$ORACLE_HOME:$PATHexport ...

  8. Linux 中 grep 命令的 12 个实践例子

    2017-10-17 Linux小管家 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一个强有力的文件 ...

  9. P2532 [AHOI2012]树屋阶梯

    题目:P2532 [AHOI2012]树屋阶梯 思路: 打表之后不难看出是裸的Catalan数.简单证明一下: 对于任意一种合法方案,都可以表示为在左下角先放一个\(k*(n+1-k),k\in[1, ...

  10. 是时候了解React Native了

    文章首发于简书,欢迎关注 随着科技的发展,手机开发也在向好的方向不停的转变.IOS和Android两大手机操作横空出世,称霸江湖.我们每开发一个手机软件最少都需要开发这两个终端. 两大操作系统都在不断 ...