zoukankan      html  css  js  c++  java
  • UWP中MarkupExtension的使用

           Xaml作为一种描述语言,在编程中极大地简化了页面开发的繁琐及时间消耗,这得益于它的多种特性:数据绑定、动画、资源文件等等。标记扩展作为其一个特性,在xaml中有不可替代的作用,今天分析下自定义标记扩展怎么实现。

           做过WPF项目的可能比较熟悉,自定义标记扩展继承MarkupExtension并实现其ProvideValue方法,即可实现。但是在UWP中,有些许区别。

    • 项目的最低官方支持版本为:Windows 10 Fall Creators Update (introduced v10.0.16299.0)。

      项目中的Target version必须是16299及以上版本,不然Framework没有MarkupExtension这个类。Min version也必须是16299及以上版本,若低于该版本,会提示缺少“UAP,verson=v10.0.16299.0”的framework。遇到这个错误需要将nuget中下图的类库更新到高版本,具体哪个版本以上未验证,我是更新到6.1.7就可以了。

              

                    

    • 配置方面完成后,下面讲解实现过程。
      自定义一个类,继承自MarkupExtension,重写基类的ProvideValue方法。类命名若以extension结尾在Xaml引用时,会自动将该文字过滤掉,只保留前半部分。

            

    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Markup;
    
    namespace Passworder.Framework.ExtendBinding
    {
        [Bindable]
        [MarkupExtensionReturnType(ReturnType =typeof(string))]
        public class PageDataContextBindingExtension : MarkupExtension
        {
            public string PropertyName { get; set; }
    
            protected override object ProvideValue()
            {
                return "This is test";
            }
        }
    }

           与WPF区别是,WPF的ProvideValue方法有一个IServiceProviderv参数,通过该参数可以更方便地实现某些功能,UWP中阉割了该功能。

           页面中,添加对该类库的引用,然后Xaml代码如下即可:

    xmlns:eb="using:XXXX.XXXX.XXXXX"
    <MenuFlyoutItem Text="{eb:PageDataContextBinding PropertyName=111}"/>

    MS文档参考:https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.markup.markupextension

    GIT实例参考:https://github.com/michael-hawker/UWPCommunityToolkit/blob/mhawker/uniformgrid-as-grid/Microsoft.Toolkit.Uwp.UI/Extensions/Markup/NullableBool.cs

  • 相关阅读:
    团队作业开发过程
    UVM基础之--------uvm_root
    UVM基础之------uvm_transaction
    UVM基础之----uvm_object
    UVM挑战及概述
    定制UVM Messages(参考)
    SV creation order
    IC验证概念总结
    win7 硬盘安装suse双系统启动顺序更改
    suse 下的gcc安装
  • 原文地址:https://www.cnblogs.com/xuanyishare/p/9511944.html
Copyright © 2011-2022 走看看