silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight 行为(Behavior)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

        行为的目的在于封装部分UI功能,那样就可以直接应用于元素而不用写任何代码。行为是一组相关操作的组合,它包含了触发器(监听某个事件或改变)和动作(完成适当的操作)的工作。例如,Deep Zoom功能由一些事件处理程序组成,允许通过鼠标按键和鼠标滚轮对Deep Zoom 图像进行平移和缩放。         想象一下在Canvas上如何让一个元素可以拥有拖放的行为,首先要创建一个派生自
        行为的目的在于封装部分UI功能,那样就可以直接应用于元素而不用写任何代码。行为是一组相关操作的组合,它包含了触发器(监听某个事件或改变)和动作(完成适当的操作)的工作。例如,Deep Zoom功能由一些事件处理程序组成,允许通过鼠标按键和鼠标滚轮对Deep Zoom 图像进行平移和缩放。

        想象一下在Canvas上如何让一个元素可以拥有拖放的行为,首先要创建一个派生自Behavior的类,Behavior是个泛型类,可以通过类型参数将行为限制到特定的元素,通常可以使用UIElement 或者是 FrameworkElement。

       用户按下鼠标左键,DragInCanvasBehavior开始拖拽操作,记录下元素左上角与鼠标指针之间的偏移量,并捕获鼠标。

  1. public class DragInCanvasBehavior : Behavior<UIElement>  @H_801_39@
  2. {  @H_801_39@
  3.     protected override void OnAttached()   @H_801_39@
  4.     {  @H_801_39@
  5.         base.onAttached();   @H_801_39@
  6.         //附加事件处理程序    @H_801_39@
  7.         this.AssociatedObject.MouSELEftButtonDown += new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonDown);   @H_801_39@
  8.         this.AssociatedObject.MouseMove += new MouseEventHandler(AssociatedObject_MouseMovE);   @H_801_39@
  9.         this.AssociatedObject.MouSELEftButtonUp += new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonUp);   @H_801_39@
  10.     }  @H_801_39@
  11.   @H_801_39@
  12.     protected override void OnDetaching()   @H_801_39@
  13.     {  @H_801_39@
  14.         base.onDetaching();   @H_801_39@
  15.         //分离事件处理程序    @H_801_39@
  16.         this.AssociatedObject.MouSELEftButtonDown -= new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonDown);   @H_801_39@
  17.         this.AssociatedObject.MouseMove -= new MouseEventHandler(AssociatedObject_MouseMovE);   @H_801_39@
  18.         this.AssociatedObject.MouSELEftButtonUp -= new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonUp);   @H_801_39@
  19.     }  @H_801_39@
  20.   @H_801_39@
  21.     //记录当前元素所放置的Canvas    @H_801_39@
  22.     private Canvas canvas;   @H_801_39@
  23.     //记录当前元素是否正被拖拽    @H_801_39@
  24.     private bool isDragging = false;   @H_801_39@
  25.     //当鼠标左键按下的时候,记录单击所在的准确位置    @H_801_39@
  26.     private Point mouSEOffset;   @H_801_39@
  27.   @H_801_39@
  28.     private void AssociatedObject_MouSELEftButtonDown(object sender, MouseButtonEventArgs E)   @H_801_39@
  29.     {  @H_801_39@
  30.         //找到Canvas    @H_801_39@
  31.         if (canvas == null)   @H_801_39@
  32.         {  @H_801_39@
  33.             canvas = (Canvas)VisualTreeHelper.GetParent(this.AssociatedObject);   @H_801_39@
  34.         }  @H_801_39@
  35.         //拖拽模式开始    @H_801_39@
  36.         isDragging = true;   @H_801_39@
  37.         //@L_675_13@鼠标单击时相对于元素的位置    @H_801_39@
  38.         //因此元素左上角的坐标为(0, 0)    @H_801_39@
  39.         mouSEOffset = e.GetPosition(AssociatedObject);  @H_801_39@
  40.         //捕获鼠标,这样即使用户突然将鼠标指针拽到元素外,仍然可以接收到MouseMove事件    @H_801_39@
  41.         AssociatedObject.CaptureMouse();  @H_801_39@
  42.     }  @H_801_39@
  43.   @H_801_39@
  44.     private void AssociatedObject_MouseMove(object sender, MouseEventArgs E)   @H_801_39@
  45.     {  @H_801_39@
  46.         if (isDragging)   @H_801_39@
  47.         {  @H_801_39@
  48.             //鼠标指针相对于Canvas的位置    @H_801_39@
  49.             Point point = e.GetPosition(canvas);  @H_801_39@
  50.             //重定位元素    @H_801_39@
  51.             Canvas.SetLeft(AssociatedObject, point.X - mouSEOffset.X);  @H_801_39@
  52.             Canvas.SetTop(AssociatedObject, point.Y - mouSEOffset.Y);  @H_801_39@
  53.         }  @H_801_39@
  54.     }  @H_801_39@
  55.   @H_801_39@
  56.     private void AssociatedObject_MouSELEftButtonUp(object sender, MouseButtonEventArgs E)   @H_801_39@
  57.     {  @H_801_39@
  58.         if (isDragging)   @H_801_39@
  59.         {  @H_801_39@
  60.             AssociatedObject.ReleaseMouseCapture();  @H_801_39@
  61.             isDragging = false;   @H_801_39@
  62.         }  @H_801_39@
  63.     }  @H_801_39@
  64. }  @H_801_39@
  

接下来只要简单的附加到Canvas中的任何元素,就可以使用这个行为。

  1. <UserControl x:Class="SilverlightApplication1.behaviors.behaviorSample"  @H_801_39@
  2.     xmlns="http://scheR_877_11845@as.microsoft.com/winfx/2006/xaml/presentation"   @H_801_39@
  3.     xmlns:x="http://scheR_877_11845@as.microsoft.com/winfx/2006/xaml"   @H_801_39@
  4.     xmlns:d="http://scheR_877_11845@as.microsoft.com/expression/blend/2008"   @H_801_39@
  5.     xmlns:mc="http://scheR_877_11845@as.openxmlformats.org/markup-compatibility/2006"   @H_801_39@
  6.     xmlns:custom="clr-namespace:SilverlightApplication1.behaviors"   @H_801_39@
  7.     xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"             @H_801_39@
  8.     @H_298_522@mc:Ignorable="d"   @H_801_39@
  9.     d:DesignHeight="300" d:DesignWidth="400">   @H_801_39@
  10.     <Canvas>   @H_801_39@
  11.         <Rectangle Canvas.Left="10" Canvas.Top="10" Width="40" Height="60" Fill="Yellow" />   @H_801_39@
  12.         <Ellipse Canvas.Left="10" Canvas.Top="70" Fill="Blue" Width="80" Height="60">   @H_801_39@
  13.             <i:Interaction.behaviors>   @H_801_39@
  14.                 <custom:DragInCanvasBehavior />   @H_801_39@
  15.             </i:Interaction.behaviors>   @H_801_39@
  16.         </Ellipse>   @H_801_39@
  17.         <Ellipse Canvas.Left="80" Canvas.Top="70" Fill="OrangeRed" Width="40" Height="70">   @H_801_39@
  18.             <i:Interaction.behaviors>   @H_801_39@
  19.                 <custom:DragInCanvasBehavior />   @H_801_39@
  20.             </i:Interaction.behaviors>   @H_801_39@
  21.         </Ellipse>   @H_801_39@
  22.     </Canvas>   @H_801_39@
  23. </UserControl>   @H_801_39@

本文链接地址为:http://blog.csdn.net/fan_ken/article/details/6737495

大佬总结

以上是大佬教程为你收集整理的Silverlight 行为(Behavior)全部内容,希望文章能够帮你解决Silverlight 行为(Behavior)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。