其他分享
首页 > 其他分享> > 【WPF】 XAML标记扩展

【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是一个派生自MarkupExtensionC#实现中的下面的类。此类包含两个字符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