标记扩展的概念

标记扩展的概念

撰写时间:2021年8月28日

标记扩展也是对属性进行赋值的一种方式,在XAML中使用一对‘{}’中括号表示,当解析遇到{}时不会直接转换为字符串,而是将其当做一个标记扩展进行处理,通过该标记扩展类型找到其真正的值;标记扩展是XAML的一个特性,您可以通过标记扩展处理属性字符串并将对象返回给XAML加载器来指定对象引用,可以实现标记扩展来为属性使用中的属性、属性元素使用中的属性或两者都提供值,轻松实现XAML页面属性赋值,资源引用,类型转换等操作;使用方式如下:
语法:
标记扩展使用{标记扩展类 参数}语法
例:
Data="{Binding Path=LinePathGeometry, Mode=TwoWay}"
此处使用了一个内置的标记扩展BindingExtension类型特性可以省略Attribute此处BindingExtension也可以简写为Binding两者等价;此处给Data属性赋值是间接地,在这里通过标记扩展语法并且传递了 Path Mode两个参数构造了一个特定的BindingExtension类Data的实际值是通过BindingExtension类通过绑定相关语法和规则(关于数据绑定也是WPF核心概念此处限于篇幅处不详细介绍了)返回;
·使用标记扩展的好处
通过上面的例子我们可以体会到使用标记扩展可以更加灵活的给属性赋值,从而摆脱硬编码的束缚,使整个程序更加健壮;另一方面通过标记扩展语法可以给标记对象传递特定的参数,构造一个特定的对象比如上例中的Binding对象通过设置绑定源 路径 模式 更新方式等等可以将依赖属性绑定到一个特定的对象从而赋值更加灵活方便;此外标记扩展还支持嵌套使用从而使标记扩展更加灵活,因此了解和使用标记扩展可以极大的提高程序的灵活性和健壮性;
·XAML内置标记扩展
在WPF框架中内置了一些标记扩展,而这些标记扩展在平时的开发过程中接触到的频率可以说是非常高的比如数据绑定 静态资源 但WPF框架中内置的标记扩展其实种类很少,下面对其做一个简单的归纳,具体使用方法可以查看MSDN文档(PS 在了解了标记扩展的语法 赋值机制后 再来理解和使用这些标记扩展应该就变得更容易些了);
TemplateBinding DynamicResource RelativeSource 等;
·自定义标记扩展
某些时候需要自定义标记扩展,要实现自定义标记扩展需要从MarkupExtension
继承,派生类的命名遵循添加Extension后缀的约定。
在派生类中需要重载基类的override object ProvideV
WPF编程中最常用的标记扩展是支持资源引用和支持数据绑定的标记扩展:
Binding(XAML载入时,将数据绑定到XAML对象),语法结构示例:
在这里插入图片描述

ElementName用于绑定到xaml界面设计中添加的其它控件对象bindingbtn;
path路径填写的就是bindingbtn的具体属性。
2. StaticResorce(引用数据字典中定义的静态资源),语法结构示例:
在这里插入图片描述

StaticResource 查询行为不支持向前引用,即不能引用在引用点之后才定义的资源。查询方式是顺着逻辑树向上查找父元素的资源字典,直到根节点;
3. TemplateBinding(XAML页面中对象模板绑定调用),语法结构示例:

  <Window.Resources>
      <!--自定义:按钮控件模板-->
      <ControlTemplate TargetType="Button" x:Key="ButtonBox">
          <!--Text:绑定模板-->
          <TextBlock Text="{TemplateBinding Content}"/>-
      </ControlTemplate>
  </Window.Resources>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值