首页 > 其他 > 详细

【WPF】附加属性

时间:2014-02-22 00:20:22      阅读:360      评论:0      收藏:0      [点我收藏+]

一直都对附加属性理解很模糊,今天看了一篇文章,恍然大悟,用个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 来定义

bubuko.com,布布扣
    /// <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);
            }
        }       
    }
bubuko.com,布布扣

 

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

【WPF】附加属性

原文:http://www.cnblogs.com/bomo/p/3559419.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!