MarkupExtension

目的

  如果要在XAML里引用静态或动态对象实例,或在XAML中创建带有参数的类。这时,我们需要用到XAML扩展。XAML扩展常用来设定属性值。使用标识扩展,告诉 XAML 处理不要像通常那样将属性值视为文本字符串,而是通过类型转换把字符串转换为静态或动态实例。

格式

        当XAML编译器看到大括号{}时,把大括号中的内容解释为XAML标记扩展。

        如:<TextBlock Text="{Binding Source={StaticResource myDataSource},Path=PersonName}"/>

  有两个标识扩展,一个是Binding标识扩展,一个是StaticResource扩展。

说明

  1、标记扩展本身是一系列类,其基类为MarkupExtension(抽象类)。

    2、从这个类中派生出十二个类,即:ResourseKey、 TypeExtension、StaticExtension、BindingBase、RelativeSourse、 ColorConvertedBitmapExtension、DynamicResourceExtension、ArrayExtension、 NullExtension、StaticResourceExtension、TemplateBindingExtension和 ThemeDictionaryExtension。其中ResourceKey、BindingBase等类又派生出其他的一些类。

  3、这些标记扩张可分为两大类:

        WPF标记扩展:StaticResource、DynamicResource(silverligh不支持)、Binding、RelativeSource和TemplateBinding。

             XAML本身定义的标记扩展:x:Type、x:Static、x:null和x:Array。

 

 

[MarkupExtensionReturnType(typeof(Thickness))]
    public class ThicknessExtension : MarkupExtension
    {
        public double Bottom { get; set; }
        public double Left { get; set; }
        public double Right { get; set; }
        public double Top { get; set; }
        public ThicknessExtension()
        {
        }
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return new Thickness(Left, Top, Right, Bottom);
        }
    }
View Code
 <Button Margin="{ext:Thickness Left=10,Bottom=10,Right=10,Top=10}" Content="Hello" />
View Code

 

转载于:https://www.cnblogs.com/FaDeKongJian/p/3284450.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值