【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
【WPF】附加属性的更多相关文章
- wpf附加属性理解
WPF附加属性 http://www.cnblogs.com/tianyou/archive/2012/12/27/2835670.html WPF属性(二)附加属性 http://blog.csdn ...
- WPF附加属性
附加属性实质也是依赖属性,是说一个属性本来不属于某个对象,但由于某种需求被后来附加上的,也就是说把对象放入一个特定环境后才具有的属性 例子:人在学校有年纪和班级两个属性,人放在学校里会获得年级和班级两 ...
- WPF 附加属性的用法 (一)
public class MDCTest { public static DependencyProperty MouseDoubleClickCommandProperty = Dependency ...
- WPF附加属性的Set函数不调用的问题
今天写程序的时候用到了附加属性,我是用VS内置的propa的代码段来实现的,代码如下: class Attach { public static bool GetIsEnabled ...
- WPF 附加属性的使用
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- wpf附加属性详解
为什么使用附加属性 附加属性的一个用途是允许不同的子元素为父元素中定义的属性指定唯一的值. 此方案的一个具体应用是,让子元素通知父元素它们在用户界面 (UI) 中的呈现方式. 一个示例是 DockPa ...
- WPF整理-为控件添加自定义附加属性
附加属性 附加属性,大家都不陌生,最常见的是Canvas.Left/Canvas.Top,类似的也有Grid.Row/Grid.Column等附加属性.举个最常见的例子 <Canvas> ...
- WPF Adorner+附加属性 实现控件友好提示
标题太空泛,直接上图 无论是在验证啊,还是提示方面等一些右上角的角标之类的效果,我们会怎么做? 这里介绍一种稍微简单一些的方法,利用附加属性和Adorner来完成. 例如WPF自带的控件上要加这样的效 ...
- WPF QuickStart系列之附加属性(Attached Property)
这一篇博客是关于如何使用附加属性和创建自定义附加属性的. 1. 附加属性使用, WPF中对附加属性使用最多的莫过于对控件布局时设置控件的位置,例如在Canvas中有一个Rectangle, Ellip ...
- wpf依赖属性、绑定实现原理、附加属性学习
依赖属性和普通属性相比节省内存的原因:对于普通属性,每个对象有需要存储一个普通属性的值,即便是默认值.而依赖属性的默认值是静态的存储在类中的,所有对象都使用同一默认值,所以对于拥有大量属性的控件来说这 ...
随机推荐
- 2. 感知机(Perceptron)基本形式和对偶形式实现
1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...
- Eigen教程(9)
整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html Eigen并没有为matrix提供直接的Reshape和Slicing的API,但是 ...
- RDD、DataFrame和DataSet
简述 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同:DataFrame多了数据的结构信息,即schema.RDD是分布式的 Java对象的集 ...
- 【Web】关于Session过期/失效的理解
一直好奇关于Session的过期,一种说法是关闭浏览器即Session失效,另一种说法是可以设置Session的过期时间,时间到了自动过期. 这两种说法到底是怎么回事?Session过期跟Cookie ...
- Android——selector背景选择器的使用详解(二)
在开发应用中,很多情况下要设计listview或button控件的背景,下面总结一下android的selector的用法:1.在drawable中配置Android的selector.将如下的XML ...
- android——字符串string(转)
原文地址:http://www.open-open.com/lib/view/open1387942832078.html String : 字符串类型 一.构造函数 String(byte[ ...
- 临时文件夹迁移 temp位置移动
方法/步骤 首先,在其他驱动器新建一个文件夹,给临时文件夹安个新家 桌面,右键"我的电脑",选择"属性" 点击"高级系统设置" 点击&quo ...
- 在controller中无法通过注解@Value获取到配置文件中定义的值
1. 默认的我们通常只在dao层用到jdbc的配置,然后使用到@Value注解获取到值. 这时候会在spring-dao扫描中加入下面配置 <context:property-placehold ...
- IntelliJ: Maven projects need to be imported: Import Changes Enable Auto-Import
upon creating a new maven project I get the popup box saying "Maven projects need to be importe ...
- In R, how to split/subset a data frame by factors in one column?
按照某列的值拆分data.frame My data is like this (for example): ID Rate State 1 24 AL 2 35 MN 3 46 FL 4 34 AL ...