WPF-17行为(以控件在界面拖动为例)
来源:互联网 发布:淘宝女装店店铺简介 编辑:程序博客网 时间:2024/06/06 08:52
行为并不是WPF中的核心的部分,是Expression Blend的设计特性。使用行为的地方,也是可以使用触发器取代的。不过行为使用起来也是有趣的,下面以一个简单的例子看看它的用法。
重写OnAttached()和OnDetaching()方法。通过AssociatedObject访问放置行为的元素。在事件中完成鼠标拖动控件的一些操作。如下:
一般WPF开发的应该都安装的有Blend。(以默认安装路径为例)需要引用C:\Program Files\Microsoft SDKs\Expression\Blend 3\Interactivity\Libraries\WPF下的System.Windows.Interactivity.dll。使用如下:
代码下载:http://download.csdn.net/detail/yysyangyangyangshan/5422719
重写OnAttached()和OnDetaching()方法。通过AssociatedObject访问放置行为的元素。在事件中完成鼠标拖动控件的一些操作。如下:
public class MyBehavior : Behavior<UIElement> { private Canvas canvas; private bool isDragging = false; private Point mouseOffset; protected override void OnAttached() { base.OnAttached(); this.AssociatedObject.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown); this.AssociatedObject.MouseMove += new System.Windows.Input.MouseEventHandler(AssociatedObject_MouseMove); this.AssociatedObject.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(AssociatedObject_MouseRightButtonUp); } protected override void OnDetaching() { base.OnDetaching(); this.AssociatedObject.MouseLeftButtonDown -= new System.Windows.Input.MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown); this.AssociatedObject.MouseMove -= new System.Windows.Input.MouseEventHandler(AssociatedObject_MouseMove); this.AssociatedObject.MouseLeftButtonUp -= new System.Windows.Input.MouseButtonEventHandler(AssociatedObject_MouseRightButtonUp); } void AssociatedObject_MouseRightButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (isDragging) { AssociatedObject.ReleaseMouseCapture(); isDragging = false; } } void AssociatedObject_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if (isDragging) { Point point = e.GetPosition(canvas); AssociatedObject.SetValue(Canvas.TopProperty, point.Y - mouseOffset.Y); AssociatedObject.SetValue(Canvas.LeftProperty, point.X - mouseOffset.X); } } void AssociatedObject_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (this.canvas == null) { canvas = VisualTreeHelper.GetParent(this.AssociatedObject) as Canvas; } isDragging = true; mouseOffset = e.GetPosition(AssociatedObject); AssociatedObject.CaptureMouse(); } }最重要的是在界面上使用行为。
一般WPF开发的应该都安装的有Blend。(以默认安装路径为例)需要引用C:\Program Files\Microsoft SDKs\Expression\Blend 3\Interactivity\Libraries\WPF下的System.Windows.Interactivity.dll。使用如下:
<Window x:Class="TestBehavior.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ibehavior="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:local="clr-namespace:TestBehavior" Title="MainWindow" Height="466" Width="875"> <Grid> <Canvas> <!--没有使用行为--> <Rectangle Canvas.Left="10" Canvas.Top="10" Fill="Yellow" Width="40" Height="60"> </Rectangle> <!--使用行为--> <Ellipse Canvas.Left="10" Canvas.Top="70" Fill="Blue" Width="80" Height="60"> <ibehavior:Interaction.Behaviors> <local:MyBehavior></local:MyBehavior> </ibehavior:Interaction.Behaviors> </Ellipse> <!--使用行为--> <Ellipse Canvas.Left="80" Canvas.Top="70" Fill="OrangeRed" Width="40" Height="70"> <ibehavior:Interaction.Behaviors> <local:MyBehavior></local:MyBehavior> </ibehavior:Interaction.Behaviors> </Ellipse> </Canvas> </Grid></Window>这样就实现了,按住鼠标左键拖动界面上图标的效果了。
代码下载:http://download.csdn.net/detail/yysyangyangyangshan/5422719
- WPF-17行为(以控件在界面拖动为例)
- WPF 鼠标拖动界面
- WPF实现控件拖动
- 在WPF中的Canvas上实现控件的拖动、缩放
- 工模-在主界面新增一级菜单的步骤(以SensorBoard为例)
- wpf在窗口的控件拖动、点击窗口中控件显示在最上面以及控件拖动不超过窗口边界
- QT中在界面中任何拖动控件位置
- WPF遍历界面控件
- Ajax 在用户控件中的应用(以Google Suggest为例)
- 关于批量控件在视图中的布局(以按钮为例)
- WPF下实现控件的拖动操作
- 在Delphi中制作以浏览器为界面的程序
- QT读取剪贴板信息和拖动文件到程序以(拖动音乐播放为列)
- C#错误显示控件使用(以登陆为例)
- WPF如何实现dialogOpenFile -以SaveFileDialog为例
- 给控件添加窗口的响应函数(子类化EDIT控件 )以Edit控件为例
- QT自定义控件,以绘画板为例
- WPF在隐藏标题栏以后实现拖动
- Android 4.0.4系统下实现apk的静默安装和启动
- 阿里的电话面试是神马感觉
- 解决HASP NoApiDylib问题
- 查询GetLastError返回值含义的方法
- HDU1256(模拟)
- WPF-17行为(以控件在界面拖动为例)
- EmailService
- 静态邻接表的简单实现
- Objective C线程 之 GCD介绍
- STL heap简单应用
- Java类型转换在函数参数中的小结
- window linux 双系统直接删除linux修复
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
- Android Intent 详解