在Avalon设计模型中引入了两个新的概念——从属属性(Dependency Properties)和附加属性(Attached Property)通过它们,我们可以实现风格化(Styling),数据绑定,默认值,动态属性(animation)等等一系列非常酷的功能。

一个动态属性(animation)的例子:
Rectangle拥有一个从属属性“Opacity”,例子中使用DoubleAnimation实现Rectangle的淡入淡出效果。
Avalon学习笔记(二)——从属属性 和 附加属性<Page  xmlns="http://schemas.microsoft.com/winfx/avalon/2005"  xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005">
Avalon学习笔记(二)——从属属性 和 附加属性  
<StackPanel Margin="30">
Avalon学习笔记(二)——从属属性 和 附加属性    
<!-- The rectangle to animate. -->
Avalon学习笔记(二)——从属属性 和 附加属性    
<Rectangle Name="myAnimatedRectangle"
Avalon学习笔记(二)——从属属性 和 附加属性      Width
="100" Height="100"
Avalon学习笔记(二)——从属属性 和 附加属性      Fill
="Blue" />
Avalon学习笔记(二)——从属属性 和 附加属性  
</StackPanel>
Avalon学习笔记(二)——从属属性 和 附加属性  
Avalon学习笔记(二)——从属属性 和 附加属性  
<Page.Storyboards>
Avalon学习笔记(二)——从属属性 和 附加属性    
<!-- Animates the opacity of the rectangle from 1.0 to 0.0 over five seconds. -->
Avalon学习笔记(二)——从属属性 和 附加属性    
<SetterTimeline TargetName="myAnimatedRectangle" Path="(Rectangle.Opacity)">
Avalon学习笔记(二)——从属属性 和 附加属性      
<DoubleAnimation From="1.0" To="0.0" Duration="0:0:5" AutoReverse="True" RepeatBehavior="Forever" />
Avalon学习笔记(二)——从属属性 和 附加属性    
</SetterTimeline>
Avalon学习笔记(二)——从属属性 和 附加属性  
</Page.Storyboards>
Avalon学习笔记(二)——从属属性 和 附加属性
</Page>
Avalon学习笔记(二)——从属属性 和 附加属性

可以直接将上面的例子复制到XAMLPad看效果。

从属属性

声明一个从属属性需要先为类型定义一个属性,然后使用如下的语法注册这个从属属性。
Avalon学习笔记(二)——从属属性 和 附加属性public static readonly DependencyProperty CounterProperty = 
Avalon学习笔记(二)——从属属性 和 附加属性DependencyProperty.Register(
Avalon学习笔记(二)——从属属性 和 附加属性  
"PropertyName",  // 属性名
Avalon学习笔记(二)——从属属性 和 附加属性
  typeof(int),     // 属性的类型
Avalon学习笔记(二)——从属属性 和 附加属性
  typeof(MyButtonSimple),  // 属性所在的类型
Avalon学习笔记(二)——从属属性 和 附加属性
  new PropertyMetadata(0)  // 属性的默认值
Avalon学习笔记(二)——从属属性 和 附加属性
);
Avalon学习笔记(二)——从属属性 和 附加属性

注册后,就可以使用XAML来访问这些属性了。于是,就可以使用Style或者Trigger来修改这些属性或者进行数据绑定了。

附加属性
附加属性看起来有点像.NET下的ToolTip组件的实现方式,只是提供了XAML的支持。所谓的附加属性,就是实现在另外一个类型中的属性。

例如:我们可以利用下面的代码将我们自定义的一个附加属性添加到系统类上而不需要建立一个新的继承层次。
Avalon学习笔记(二)——从属属性 和 附加属性<Button Name="mybtn3" custom:CustomAttachedPropertyClass.TheProperty="3" />

所需要的,就是使用如下的代码声明一个附加属性类型。
Avalon学习笔记(二)——从属属性 和 附加属性public class CustomAttachedPropertyClass
}

据说在Avalon中,为从属属性和附加属性提供了Cache的功能,因此应该效率还能保证。但是我对此持怀疑态度。没有做过具体的测试,就不好说了。

相关文章:

  • 2021-08-06
  • 2021-06-19
  • 2022-02-02
  • 2021-12-21
  • 2022-12-23
  • 2021-09-03
  • 2021-07-13
猜你喜欢
  • 2022-12-23
  • 2022-02-04
  • 2021-10-04
  • 2021-08-12
  • 2021-11-24
  • 2021-09-25
  • 2021-09-15
相关资源
相似解决方案