Xaml做为一种描述语言,在编程中极大地简化了页面开发的繁琐及时间消耗,这得益于它的多种特性:数据绑定、动画、资源文件等等。标记扩展做为其一个特性,在xaml中有不可替代的做用,今天分析下自定义标记扩展怎么实现。git
作过WPF项目的可能比较熟悉,自定义标记扩展继承MarkupExtension并实现其ProvideValue方法,便可实现。可是在UWP中,有些许区别。github
项目中的Target version必须是16299及以上版本,否则Framework没有MarkupExtension这个类。Min version也必须是16299及以上版本,若低于该版本,会提示缺乏“UAP,verson=v10.0.16299.0”的framework。遇到这个错误须要将nuget中下图的类库更新到高版本,具体哪一个版本以上未验证,我是更新到6.1.7就能够了。编程
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中阉割了该功能。windows
页面中,添加对该类库的引用,而后Xaml代码以下便可:api
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.markupextensionide