【WPF】 XAML标记扩展
作者:互联网
原文
XAML标记扩展定义
WPF 标记扩展 有哪些
WPF 编程中最常用的标记扩展是支持资源引用的标记扩展(StaticResource 和 DynamicResource)以及支持数据绑定的标记扩展 (Binding)。
语法规则
语法一、当用于提供特性值时,将标记扩展序列与 XAML 处理器区分开的语法是左右大括号({ 和 })。 然后,由紧跟在左大括号后面的字符串标记来标识标记扩展的类型。
<Button Content = "{local:MyMarkupExtension FirstStr = Markup, SecondStr = Extension}" Width = "200" Height = "20" />
语法二、当用在属性元素语法中时,标记扩展在外观上与任何其他用于提供属性元素值的元素相同,即:一个将标记扩展类作为元素引用并以尖括号 (<>) 括起的 XAML 元素声明。
<TextBlock > <TextBlock.Text> <local:MyMarkupExtension FirstStr="MyMarkup1" SecondStr="Extension2"></local:MyMarkupExtension> </TextBlock.Text> </TextBlock>
用途
标记扩展基类
若要定义可与 System.Xaml 中的 XAML 读取器和 XAML 编写器的默认实现进行交互的自定义标记扩展,请从抽象的 MarkupExtension 类派生一个类。该类有一个要重写的方法,即 ProvideValue。您可能还需要定义其他构造函数来支持标记扩展用法的参数,并匹配可设置的属性。
自定义标记扩展
在上述XAML代码中,创建一个带有某些属性的按钮,对于内容值,自定义标记扩展名(My:MyMarkupExtension)已被分别用于分配给FirstStr和SecondStr的两个值“Markup”和“Extension”。
其实,MyMarkupExtension
是一个派生自MarkupExtension
C#实现中的下面的类。此类包含两个字符string变量FirstStr和SecondStr,它们连接并将该字符string从ProvideValue方法返回到按钮的内容。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace XAMLMarkupExtension { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } public class MyMarkupExtension : MarkupExtension { public MyMarkupExtension() { } public String FirstStr { get; set; } public String SecondStr { get; set; } public override object ProvideValue(IServiceProvider serviceProvider) { return FirstStr + " " + SecondStr; } } }
xaml中代码
<Window x:Class = "XAMLMarkupExtension.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:my = "clr-namespace:XAMLMarkupExtension" Title = "MainWindow" Height = "350" Width = "525"> <Grid> <Button Content = "{my:MyMarkupExtension FirstStr = Markup, SecondStr = Extension}" Width = "200" Height = "20" /> </Grid> </Window>
让我们来运行这个应用程序,您可以在MainWindow中立即看到“标记扩展名”已成功地用作按钮的内容。
底层的类对象模型
标签:标记,Windows,XAML,扩展,System,using,WPF 来源: https://www.cnblogs.com/cdaniu/p/16460036.html