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开始拖拽操作,记录下元素左上角与鼠标指针之间的偏移量,并捕获鼠标。
- public class DragInCanvasBehavior : Behavior<UIElement> @H_801_39@
- { @H_801_39@
-
protected override void OnAttached()
@H_801_39@
- { @H_801_39@
-
base.onAttached();
@H_801_39@
-
@H_801_39@
-
this.AssociatedObject.MouSELEftButtonDown += new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonDown);
@H_801_39@
-
this.AssociatedObject.MouseMove += new MouseEventHandler(AssociatedObject_MouseMovE);
@H_801_39@
-
this.AssociatedObject.MouSELEftButtonUp += new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonUp);
@H_801_39@
- } @H_801_39@
- @H_801_39@
-
protected override void OnDetaching()
@H_801_39@
- { @H_801_39@
-
base.onDetaching();
@H_801_39@
-
@H_801_39@
-
this.AssociatedObject.MouSELEftButtonDown -= new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonDown);
@H_801_39@
-
this.AssociatedObject.MouseMove -= new MouseEventHandler(AssociatedObject_MouseMovE);
@H_801_39@
-
this.AssociatedObject.MouSELEftButtonUp -= new MouseButtonEventHandler(AssociatedObject_MouSELEftButtonUp);
@H_801_39@
- } @H_801_39@
- @H_801_39@
-
@H_801_39@
-
private Canvas canvas;
@H_801_39@
-
@H_801_39@
-
private bool isDragging = false;
@H_801_39@
-
@H_801_39@
-
private Point mouSEOffset;
@H_801_39@
- @H_801_39@
-
private void AssociatedObject_MouSELEftButtonDown(object sender, MouseButtonEventArgs E)
@H_801_39@
- { @H_801_39@
-
@H_801_39@
-
if (canvas == null)
@H_801_39@
- { @H_801_39@
-
canvas = (Canvas)VisualTreeHelper.GetParent(this.AssociatedObject);
@H_801_39@
- } @H_801_39@
-
@H_801_39@
-
isDragging = true;
@H_801_39@
-
@H_801_39@
-
@H_801_39@
- mouSEOffset = e.GetPosition(AssociatedObject); @H_801_39@
-
@H_801_39@
- AssociatedObject.CaptureMouse(); @H_801_39@
- } @H_801_39@
- @H_801_39@
-
private void AssociatedObject_MouseMove(object sender, MouseEventArgs E)
@H_801_39@
- { @H_801_39@
-
if (isDragging)
@H_801_39@
- { @H_801_39@
-
@H_801_39@
- Point point = e.GetPosition(canvas); @H_801_39@
-
@H_801_39@
- Canvas.SetLeft(AssociatedObject, point.X - mouSEOffset.X); @H_801_39@
- Canvas.SetTop(AssociatedObject, point.Y - mouSEOffset.Y); @H_801_39@
- } @H_801_39@
- } @H_801_39@
- @H_801_39@
-
private void AssociatedObject_MouSELEftButtonUp(object sender, MouseButtonEventArgs E)
@H_801_39@
- { @H_801_39@
-
if (isDragging)
@H_801_39@
- { @H_801_39@
- AssociatedObject.ReleaseMouseCapture(); @H_801_39@
-
isDragging = false;
@H_801_39@
- } @H_801_39@
- } @H_801_39@
- } @H_801_39@
接下来只要简单的附加到Canvas中的任何元素,就可以使用这个行为。
- <UserControl x:Class="SilverlightApplication1.behaviors.behaviorSample" @H_801_39@
-
xmlns="http://scheR_877_11845@as.microsoft.com/winfx/2006/xaml/presentation"
@H_801_39@
-
xmlns:x="http://scheR_877_11845@as.microsoft.com/winfx/2006/xaml"
@H_801_39@
-
xmlns:d="http://scheR_877_11845@as.microsoft.com/expression/blend/2008"
@H_801_39@
-
xmlns:mc="http://scheR_877_11845@as.openxmlformats.org/markup-compatibility/2006"
@H_801_39@
-
xmlns:custom="clr-namespace:SilverlightApplication1.behaviors"
@H_801_39@
-
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
@H_801_39@
-
@H_298_522@mc:Ignorable="d"
@H_801_39@
-
d:DesignHeight="300" d:DesignWidth="400">
@H_801_39@
-
<Canvas>
@H_801_39@
-
<Rectangle Canvas.Left="10" Canvas.Top="10" Width="40" Height="60" Fill="Yellow" />
@H_801_39@
-
<Ellipse Canvas.Left="10" Canvas.Top="70" Fill="Blue" Width="80" Height="60">
@H_801_39@
-
<i:Interaction.behaviors>
@H_801_39@
-
<custom:DragInCanvasBehavior />
@H_801_39@
-
</i:Interaction.behaviors>
@H_801_39@
-
</Ellipse>
@H_801_39@
-
<Ellipse Canvas.Left="80" Canvas.Top="70" Fill="OrangeRed" Width="40" Height="70">
@H_801_39@
-
<i:Interaction.behaviors>
@H_801_39@
-
<custom:DragInCanvasBehavior />
@H_801_39@
-
</i:Interaction.behaviors>
@H_801_39@
-
</Ellipse>
@H_801_39@
-
</Canvas>
@H_801_39@
-
</UserControl>
@H_801_39@
本文链接地址为:http://blog.csdn.net/fan_ken/article/details/6737495
大佬总结
以上是大佬教程为你收集整理的Silverlight 行为(Behavior)全部内容,希望文章能够帮你解决Silverlight 行为(Behavior)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。