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