Spiga
Posts - 80, Articles - 0, Comments - 364
Cnblogs
Dashboard
Login
Home
Contact
Gallery
RSS
Colin的技术
Focus on .NET
Avalon学习笔记(二)——从属属性 和 附加属性
2005-07-01 00:00 by Colin Han, 1761 visits,
收藏
,
编辑
在Avalon设计模型中引入了两个新的概念——从属属性(Dependency Properties)和附加属性(Attached Property)通过它们,我们可以实现风格化(Styling),数据绑定,默认值,动态属性(animation)等等一系列非常酷的功能。
一个动态属性(animation)的例子:
Rectangle拥有一个从属属性“Opacity”,例子中使用DoubleAnimation实现Rectangle的淡入淡出效果。
<
Page
xmlns
="http://schemas.microsoft.com/winfx/avalon/2005"
xmlns:x
="http://schemas.microsoft.com/winfx/xaml/2005"
>
<
StackPanel
Margin
="30"
>
<!--
The rectangle to animate.
-->
<
Rectangle
Name
="myAnimatedRectangle"
Width
="100"
Height
="100"
Fill
="Blue"
/>
</
StackPanel
>
<
Page
.Storyboards
>
<!--
Animates the opacity of the rectangle from 1.0 to 0.0 over five seconds.
-->
<
SetterTimeline
TargetName
="myAnimatedRectangle"
Path
="(Rectangle.Opacity)"
>
<
DoubleAnimation
From
="1.0"
To
="0.0"
Duration
="0:0:5"
AutoReverse
="True"
RepeatBehavior
="Forever"
/>
</
SetterTimeline
>
</
Page.Storyboards
>
</
Page
>
可以直接将上面的例子复制到XAMLPad看效果。
从属属性
声明一个从属属性需要先为类型定义一个属性,然后使用如下的语法注册这个从属属性。
public
static
readonly
DependencyProperty CounterProperty
=
DependencyProperty.Register(
"
PropertyName
"
,
//
属性名
typeof
(
int
),
//
属性的类型
typeof
(MyButtonSimple),
//
属性所在的类型
new
PropertyMetadata(
0
)
//
属性的默认值
);
注册后,就可以使用XAML来访问这些属性了。于是,就可以使用Style或者Trigger来修改这些属性或者进行数据绑定了。
附加属性
附加属性看起来有点像.NET下的ToolTip组件的实现方式,只是提供了XAML的支持。所谓的附加属性,就是实现在另外一个类型中的属性。
例如:我们可以利用下面的代码将我们自定义的一个附加属性添加到系统类上而不需要建立一个新的继承层次。
<
Button
Name
="mybtn3"
custom:CustomAttachedPropertyClass.TheProperty
="3"
/>
所需要的,就是使用如下的代码声明一个附加属性类型。
public
class
CustomAttachedPropertyClass
{
public
static
readonly
DependencyProperty ThePropertyProperty
=
DependencyProperty.RegisterAttached(
"
TheProperty
"
,
typeof
(
int
),
typeof
(CustomAttachedPropertyClass),
new
PropertyMetadata(
0
)
);
public
static
void
SetTheProperty(DependencyObject d,
int
value)
{
d.SetValue(ThePropertyProperty, value);
}
public
static
int
GetTheProperty(DependencyObject d)
{
return
(
int
)d.GetValue(ThePropertyProperty);
}
}
据说在Avalon中,为从属属性和附加属性提供了Cache的功能,因此应该效率还能保证。但是我对此持怀疑态度。没有做过具体的测试,就不好说了。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
Categories:
WPF
Add your comment
1 条回复
184376
#1楼
[
楼主
]
Cajon's Blog
2005-07-01 10:12
使用C#实现动态Button的例子:
// Create and set the Button.
Button aButton = new Button();
aButton.Content = "A Button";
// Create the animation instance.
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.From = 75;
myDoubleAnimation.To = 300;
myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(5000));
myDoubleAnimation.AutoReverse = true;
myDoubleAnimation.RepeatBehavior = RepeatBehavior.Forever;
// Animate the Button's Width.
aButton.PersistentAnimations[Button.WidthProperty] = myDoubleAnimation;
回复
引用
查看
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
《福布斯》:谷歌进军硬件产品 难撼动苹果地位
·
美国空军拟最多购买1.8万台iPad 2
·
伊朗封杀Gmail和Facebook等互联网服务
·
分析称专利之争让谷歌苹果两败俱伤
·
Android平台发现新型手机病毒Rootsmart
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
About
本站内容除特别声明,全部使用
创作共用(署名-非商业性使用)
2.5 中文版许可协议共享
如果你喜欢,请订阅我的博客
昵称:
Colin Han
园龄:
6年8个月
粉丝:
25
关注:
12
最新评论
Re:2012新年愿望
衷心祝福多多他爸的愿望都能实现! -- Aaron Lu
Re:64位XP操作系统下访问Access数据库的问题及解决
good -- 崔鹏飞
Re:100%测试覆盖率真的有用吗?
@
Colin Han
非常贴切 -- greatghoul
Re:100%测试覆盖率真的有用吗?
@
greatghoul
其实,MUDA是“麻达”(陕西方言,有麻烦,坏了的意思)
:) -- Colin Han
Re:100%测试覆盖率真的有用吗?
MUDA是不是妈的的意思? -- greatghoul
随笔分类
Rss
ASP.NET(1)
Rss
Bugs(4)
Rss
Component(8)
Rss
FxCop翻译(17)
Rss
Office(1)
Rss
Python(9)
Rss
WPF(12)
Rss
基本技术(11)
Rss
技术随想(5)
Rss
架构设计(3)
Rss
其它(21)
推荐排行榜
阅读排行榜
友情链接
GrapeCity Develop Network
Rss
Kevin Shan
Rss
WinkingZhang的博客
Rss
葡萄城控件技术团队博客