Silverlight实用窍门系列:60.Silverlight中自定义Behavior,实现图片动画渐变Behavior

简介:

在Silverlight中我们需要了解Behavior行为,它可以将一些常用的行为、效果等封装起来,在需要调用的时候可以非常方便的调用,主要需要引用System.Windows.Interactivity.DLL。它的运行本质是为采用了Behavior行为的源对象自动加载处理事件。

        我们自定义一个Behavior行为需要做到以下三点方可成功。

        一、继承于 System.Windows.Interactivity.DLL中的Behavior<T>类,其中的T可以更换为Image、 TextBox、Label等所有的元素对象甚至是DependencyObject,表示这个自定义的Behavior可以作用于哪种控件。

        二、重写覆盖OnAttached方法,在这个方法中需要为添加Behavior行为的对象附加事件.

        三、重写覆盖OnDetaching方法,在这个方法中需要为删除Behavior行为的对象卸载事件.

        定义好Behavior行为之后,在界面上需要如以下方式使用:

 


 
 
  1. <UserControl x:Class="SLBehavior.MainPage" 
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  4.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  5.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  6.     xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
  7.              xmlns:me="clr-namespace:SLBehavior" 
  8.     mc:Ignorable="d" 
  9.     d:DesignHeight="300" d:DesignWidth="800"
  10.  
  11.     <Grid x:Name="LayoutRoot" Background="White"
  12.         <Image  Source="lv.jpg" HorizontalAlignment="Left" Width="352" Height="318" 
  13.                 Margin="27,27,0,0"  x:Name="img1" > 
  14.             <i:Interaction.Behaviors> 
  15.  <me:OpacityBehavior From="1" To="0.7"/> 
  16.  </i:Interaction.Behaviors> 
  17.         </Image> 
  18.  
  19.         <Image  Source="hua.jpg" HorizontalAlignment="Left" Width="221" Margin="402,0,0,-33"  x:Name="img2" > 
  20.             <i:Interaction.Behaviors> 
  21.  <me:OpacityBehavior From="1" To="0.5"/> 
  22.  </i:Interaction.Behaviors> 
  23.         </Image> 
  24.     </Grid> 
  25. </UserControl> 

        自定义的Behavior行为代码如下,是一个控制图片透明度的动画效果。

 


 
 
  1. public class OpacityBehavior : Behavior<Image> 
  2.     private double _From = 1; 
  3.     private double _To = 0.6; 
  4.     //装载DoubleAnimation动画的故事板 
  5.     Storyboard sboard = new Storyboard(); 
  6.     DoubleAnimation danima = new DoubleAnimation(); 
  7.     Image img; 
  8.  
  9.     /// <summary> 
  10.     /// 透明度从多少开始 
  11.     /// </summary> 
  12.     public double From 
  13.     { 
  14.         get { return _From; } 
  15.         set { _From = value; } 
  16.     } 
  17.  
  18.     /// <summary> 
  19.     /// 透明度到多少结尾 
  20.     /// </summary> 
  21.     public double To 
  22.     { 
  23.         get { return _To; } 
  24.         set { _To = value; } 
  25.     } 
  26.  
  27.     /// <summary> 
  28.     /// 在为某个对象添加Behavior行为时附加事件 
  29.     /// </summary> 
  30.     protected override void OnAttached() 
  31.     { 
  32.         base.OnAttached(); 
  33.  
  34.         //清除故事版和资源 
  35.         img = this.AssociatedObject as Image; 
  36.         sboard.Children.Clear(); 
  37.         img.Resources.Clear(); 
  38.         //设置img控件的透明度的Double类型数字变化 
  39.         danima.SetValue(Storyboard.TargetNameProperty, img.Name); 
  40.         danima.SetValue(Storyboard.TargetPropertyProperty, new PropertyPath("UIElement.Opacity")); 
  41.         danima.Duration = new Duration(new TimeSpan(0, 0, 1)); 
  42.         sboard.Children.Add(danima); 
  43.         img.Resources.Add("Storyboard", sboard); 
  44.  
  45.         //绑定鼠标事件 
  46.         img.MouseEnter += new MouseEventHandler(img_MouseEnter); 
  47.         img.MouseLeave += new MouseEventHandler(img_MouseLeave); 
  48.     } 
  49.  
  50.     /// <summary> 
  51.     /// 在为某个对象移除Behavior行为时注销事件 
  52.     /// </summary> 
  53.     protected override void OnDetaching() 
  54.     { 
  55.         base.OnDetaching(); 
  56.         img.MouseEnter -= new MouseEventHandler(img_MouseEnter); 
  57.         img.MouseLeave -= new MouseEventHandler(img_MouseLeave); 
  58.     } 
  59.  
  60.     void img_MouseEnter(object sender, MouseEventArgs e) 
  61.     { 
  62.         danima.From = this.From
  63.         danima.To = this.To
  64.         sboard.Begin(); 
  65.     } 
  66.  
  67.     void img_MouseLeave(object sender, MouseEventArgs e) 
  68.     { 
  69.         danima.From = this.To
  70.         danima.To = this.From
  71.         sboard.Begin(); 
  72.     } 

        注意:A:  AssociatedObject属性是使用此行为的对象。B:在行为中定义的属性可以在Xaml界面直接赋值。

        最后,如需源码请点击 SLBehavior.zip 下载,效果如下两张图所示:

 



本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827181

相关文章
Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象
原文:Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象 原创文章,如需转载,请注明出处。   最近在一直研究Silverlight下的数据绑定控件,发现有这样两个接口IEditableObject 和IEditableCollectionView,记录一下结论,欢迎交流指正。
872 0
|
C# 前端开发
silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发) 前面我们画了一只会飞动的小鸟,今天我们在目标是一个会发光的太阳。本章节的动画虽然简单,但是实现的效果可是一点也不打折。
1186 0
|
C#
silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发) 本教程基本涵盖了WPF和silverlight中的各种动画。先上张效果图。 声明下,这个做的不是让大家照搬的,只是让大家熟悉下动画效果,这个成品基本涵盖了sl里面所有的动画效果。
1399 0
|
C#
silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发) 有个问题想请教下大家,我仿了腾讯的SL版QQ,相似度95%以上。我想写成教程教大家怎么开发出来,会不会有版权什么问题的。
1150 0
|
前端开发 C#
silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发) 这章有点长,所以我分成了两章。这一章主要是准备工作,差不多算美工篇吧,这章基本不会介绍多少动画效果,主要讲的是blend中工具的使用,利用哪些工具做出哪些效果。
1255 0
|
前端开发 C#
silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发) 这篇介绍的是3D导航,点击图标,页面360°翻转的效果!有什么不足的欢迎大家指出来。 1.新建一个usercontrol,命名为menu. 2.按照下图设置一下属性。
1248 0
|
容器
Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)
原文:Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)   Silverlight的基础动画包括偏移、旋转、缩放、倾斜和翻转动画,这些基础动画毫无疑问是在Silverlight中使用得最多的动画效果,其使用也是非常简单的。
1020 0
|
容器 数据可视化 内存技术
Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)
原文:Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)   用户界面组件、图像元素和多媒体功能可以让我们的界面生动活泼,除此之外,Silverlight还具备动画功能,它可以让应用程序“动起来”。
823 0
Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)
原文:Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)   Silverlight中的倾斜变化动画(SkewTransform)能够实现对象元素的水平、垂直方向的倾斜变化动画效果。
848 0
|
容器
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
原文:Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)   正如你所看到的,Blend是一个非常强大的节约时间的设计工具,在Blend下能够设计出很多满意的动画作品,或许他具体是怎么实现的,通过什么方式实现的我们还是一无所知。
950 0

热门文章

最新文章