【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依赖属性、绑定实现原理、附加属性学习
依赖属性和普通属性相比节省内存的原因:对于普通属性,每个对象有需要存储一个普通属性的值,即便是默认值.而依赖属性的默认值是静态的存储在类中的,所有对象都使用同一默认值,所以对于拥有大量属性的控件来说这 ...
随机推荐
- Android背景颜色渐变
●使用XML的方式为背景添加渐变效果 1.在res/drawable文件夹里添加一个jbshape.xml文件,然后写入如下代码: <?xml version="1.0" e ...
- 解决mysql group by和count同时使用的问题
例如这样一个表,我想统计email和passwords都不相同的记录的条数 CREATE TABLE IF NOT EXISTS `test_users` ( `email_id` ) unsigne ...
- docker探索-Docker 1.13 编排能力进化(十三)
简介 docker stack deploy和docker-compose up,这两个命令都是操作compose的yml文件的,有什么区别?想知道这个问题,看下面文章 https://yq.al ...
- [dig]使用dig查看当前网络连通情况
1. dig domain, 通过server可以查到该域名被哪个server给解析了 2. dig @dns domain 不走/etc/resolve.conf,直接走指定的dns ------- ...
- Redis提供的持久化机制(一)
Redis提供的持久化机制 redis是一个内存数据库,也就是说它的所有的数据都是保存在内存中的,而内存中的数据当程序结束时就会消失,所以我们要想办法把内存中的数据写到磁盘中.当程序异常退出或者正常退 ...
- Linxu 安装Nignx
http://www.myhack58.com/Article/sort099/sort0102/2014/44894.htm 1.为了追加 nginx 的 yum 仓库,需要创建一个文件 /etc/ ...
- IDEA快捷键整理(最详细的)
IDEA快捷键 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭 ...
- 一些有用的js插件
getfuelux.com 一系列插件合集 Ion.RangeSlider 超级牛的范围选择控件 Ion.CheckRadio Ion.Tabs Ion.Calendar Ion.ImageSlid ...
- Navi.Soft31.WinCE框架.开发手册(含下载地址)
1.概述 1.1应用场景 随着物联网的普及,越来越多的制造商对货品从原料配备,加工生产,销售出库等环节的要求和把控越来越高.在此情况之下,传统的ERP软件已经无法满足现有的操作流程. 移动设备的应用, ...
- OAuth 授权