在WPF 4.0中,引入了一个比较实用的库——Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除了内置了一系列比较好用的功能外,还提供了比较良好的扩展接口。本文这里简单的介绍一下Behavior这个扩展。
顾名思义,Behavior可以赋予控件新的行为能力,例如,我们可以通过MouseDragElementBehavior给控件附加上支持拖放的能力。使用方式如下:
-
添加Interactions库的引用。主要添加如下两个DLL:Microsoft.Expression.Interactions.dll和System.Windows.Interactivity.dll。
-
添加如下名字空间
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" -
在控件中添加MouseDragElementBehavior
<Image Source="2.jpg" > <i:Interaction.Behaviors> <ei:MouseDragElementBehavior/> </i:Interaction.Behaviors> </Image>
这三步中前面几步都是添加Interactions库的支持,对于后面介绍的Trigger和Action也是一样的,只有<ei:MouseDragElementBehavior/>一句才是和Behavior相关的。实际上,我们可以通过在Blend里直接将MouseDragElementBehavior拖放到控件上简化这一过程。加上MouseDragElementBehavior后,我们的控件就支持鼠标拖拽移动了,非常给力。
实际上,系统还提供了一系列非常好用的Behavior,后面我再单独写文章来介绍它。
编写自己的Behavior
除了系统自己提供的Behavior外,我们也可以通过自己编写Behavior来实现自定义行为,一个简单的示例如下:
class SkewBehavior : Behavior<UIElement> { SkewTransform _transForm; protected override void OnAttached() { base.OnAttached(); _transForm = new SkewTransform(); AssociatedObject.RenderTransform = _transForm; AssociatedObject.RenderTransformOrigin = new Point(0.5, 0.5); _transForm.AngleX = 30; } protected override void OnDetaching() { _transForm.AngleX = 0; base.OnDetaching(); } }