关于附加属性

    <StackPanel TextElement.FontSize="30" TextElement.FontStyle="Italic" Orientation="Horizontal"
                HorizontalAlignment="Center" >
        <!--
        为什么是TextElement.FontStyle 而不是FontStyle
        因为StackPanel没有FontStyle 这个属性,当XMAL解析器遇到这种语法的时候 他就要求TextElement(也叫附加属性提供者) 有个静态方法叫做SetFontSize,
        这样它们才可以设置相应的属性值
        
        C#代码
        TextElement.SetFontStyle(panel,FontStyles.Italic);
        
        像FontStyles.Italic 这样的枚举值  在xmal被简单的写成Italic,之所以可以这样写 
        是因为有.NET Framework中的EnumCoverter类型的转化器,它可以转换所有不去分辨大小写的字符串。
        
        xmal很好的吧FontStyle作为StackPanel的逻辑附加属性
        但是在C#告诉我们并没有什么神奇之处  仅仅是调用了与一个元素相关联的方法,
        而那个元素中有一个与其他东西没有关系的属性
        有意思的是.NET属性都不是附加属性
        
        从内部看,SetFontSize这样的方法会只是调用DependencyObject.SetValue方法
        通常每一个普通的依赖属性访问器都会调用同一个方法,但是这里调用的是传进来的DependencyObject上的
        DependencyObject.SetValue方法 而不是当前实例的
        public static void SetFontSize(DependencyObject element,double value)
        {
            element.SetValue(TextElement.FontSizeProperty,value);
        }
        与此类似附加属性也定义了一个静态方法叫做GetXXX(XXX是属性的名称) 它会调用我们属性的DependencyObject.GetValue方法
        public static double GetFontSize(DependencyObject element)
        {
            return  (double)element.GetValue(TextElement.FontSizeProperty);
        }   
        与普通依赖属性的属性包装器一样 这些GetXXX和SetXXX方法只能调用GetValue和SetValue方法  不能挪为他用
        -->
        <Button MinWidth="75" Margin="10">Help</Button>
        <Button MinWidth="75" Margin="10">10</Button>
    </StackPanel>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值