zoukankan      html  css  js  c++  java
  • 【WPF】附加属性

    一直都对附加属性理解很模糊,今天看了一篇文章,恍然大悟,用个Demo掩饰一下对附加属性的理解

    附加属性,简单的理解就是给一个对象外在的定义一个属性,使得该对象拥有和使用该属性,最典型的是Grid.Row和Canvas.Top的应用

    1、定义一个空间Rectangle,并且使之旋转30度

            <Rectangle Fill="Red" Width="100" Height="60" RenderTransformOrigin=".5,.5">
                <Rectangle.RenderTransform>
                    <RotateTransform Angle="30" />
                </Rectangle.RenderTransform>
            </Rectangle>

    2、如果我们有很多控件都需要进行旋转的操作,代码很显得很长很臃肿,这个时候附加属性就派上用场了,我们让Rectangle拥有一个属性Angle,然后控件可以根据Angle属性的值控制旋转的角度

            <Rectangle Fill="Red" Width="100" Height="60" RenderTransformOrigin=".5,.5" local:RotationManager.Angle="30" />

      这样的话就代码就显得更短更清晰了

    3、下面定义附加属性,附加属性通过外部类 RotationManager 来定义

        /// <summary>
        /// 旋转控制器
        /// </summary>
        public class RotationManager : DependencyObject
        {
            //附加属性取值
            public static double GetAngle(DependencyObject obj)
            {
                return (double) obj.GetValue(AngleProperty);
            }
    
            //附加属性赋值
            public static void SetAngle(DependencyObject obj, double value)
            {
                obj.SetValue(AngleProperty, value);
            }
    
            //注册附加属性,与依赖属性的区别:RegisterAttached
            public static readonly DependencyProperty AngleProperty =
                DependencyProperty.RegisterAttached("Angle", typeof (double), typeof (RotationManager),
                    new PropertyMetadata(0.0, OnAngleChanged));
    
            private static void OnAngleChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
            {
                //这里控制旋转
                var element = obj as FrameworkElement;
                if (element != null)
                {
                    element.RenderTransform = new RotateTransform((double)e.NewValue);
                }
            }       
        }

    参考: http://www.cnblogs.com/DebugLZQ/p/3153098.html

  • 相关阅读:
    同一部电脑配两个git账号
    在span中,让里面的span垂直居中用这个
    三张图搞懂JavaScript的原型对象与原型链
    vue2.0 生命周期
    js中__proto__和prototype的区别和关系?
    【转】css 包含块
    【转】BFC(block formating context)块级格式化上下文
    javascript中函数的5个高级技巧
    toString() 和 valueOf()
    桌面图标列表排列小工具
  • 原文地址:https://www.cnblogs.com/bomo/p/3559419.html
Copyright © 2011-2022 走看看