Main.xaml

    <Grid x:Name="LayoutRoot" Background="Transparent"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><!--TitlePanel 包含应用程序的名称和页标题--><StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"><TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/><TextBlock x:Name="PageTitle" Text="页面名称" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/></StackPanel><!--ContentPanel - 在此处放置其他内容--><Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"><Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="135,138,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" /></Grid></Grid>

Main.xaml.cs

    public partial class MainPage : PhoneApplicationPage{// 构造函数public MainPage(){InitializeComponent();}private void button1_Click(object sender, RoutedEventArgs e){this.NavigationService.Navigate(new Uri("/MouseIndex.xaml", UriKind.Relative));}}

MouseIndex.xaml

    <!--LayoutRoot 是包含所有页面内容的根网格--><Canvas x:Name="LayoutRoot" MouseLeave="LayoutRoot_MouseLeave" MouseMove="LayoutRoot_MouseMove"><Canvas.Background><ImageBrush Stretch="Fill" ImageSource="./Image/Backgroup.jpg"/></Canvas.Background><TextBlock x:Name="msgBlock" Grid.Row="0" Grid.Column="0" VerticalAlignment="Bottom" Canvas.Left="500" Canvas.Top="48" /><TextBlock x:Name="mouseMsg" Grid.Row="0" Grid.Column="1" VerticalAlignment="Bottom" Canvas.Left="528" Canvas.Top="148" /><!--TitlePanel 包含应用程序的名称和页标题--><StackPanel  x:Name="TitlePanel" Margin="140,17,12,234" Canvas.Left="419" Canvas.Top="161" Height="96" Width="96"><Image x:Name="RightButton" MouseLeftButtonDown="RightButton_MouseLeftButtonDown" MouseLeftButtonUp="RightButton_MouseLeftButtonUp" Stretch="Fill" Source="./Image/doubleClick.png"></Image></StackPanel><StackPanel Margin="82,128,67,118" x:Name="stackPanel2" Canvas.Left="432" Canvas.Top="193"><Image x:Name="LeftButton" MouseLeftButtonDown="LeftButton_MouseLeftButtonDown" MouseLeftButtonUp="LeftButton_MouseLeftButtonUp" Stretch="Fill" Source="./Image/click.png" Height="100" Width="100" /></StackPanel><!--ContentPanel - 在此处放置其他内容--><Canvas x:Name="ContentPent" Width="450" Height="450" Canvas.Left="12" Canvas.Top="18"><Image x:Name="MouseButton" Stretch="Fill" Source="./Image/Button.png" Height="120" Width="120" Canvas.Top="165" Canvas.Left="165" MouseLeftButtonDown="MouseButton_MouseLeftButtonDown" MouseLeave="MouseButton_MouseLeave"/></Canvas><TextBlock x:Name="haha" Canvas.Left="82" Canvas.Top="48" Height="30" Text="TextBlock" /></Canvas>

Mouse.xaml.cs

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Microsoft.Phone.Controls;
using Model;
using Alien.NetWork;namespace WP7Face
{public partial class MouseIndex : PhoneApplicationPage{bool IsMove = false;Point centerP = new Point(125, 125);Point mousePoint;const double hahax = 225;//按钮中心据conver顶部的距离const double hahay = 225;//按钮中心据conver左边的距离private double CentX{get{return (double)MouseButton.GetValue(Canvas.LeftProperty) + MouseButton.Width / 2;}set{value = value - MouseButton.Width / 2;MouseButton.SetValue(Canvas.LeftProperty, value);}}private double CentY{get{return (double)MouseButton.GetValue(Canvas.TopProperty) + MouseButton.Height / 2;}set{value = value - MouseButton.Height / 2;MouseButton.SetValue(Canvas.TopProperty, value);}}public MouseIndex(){InitializeComponent();}private void MouseButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){IsMove = true;haha.Text = string.Format("{0}:{1}", (int)CentX, (int)CentY);}private void MouseButton_MouseLeave(object sender, MouseEventArgs e){Point mousePoint = e.GetPosition(ContentPent);}//提交命令public void Submit(string ordor, double submitX, double submitY){Message message=new Message();message.Type = "mouseContorl";string x = submitX.ToString();string y = submitY.ToString();message.Data = "mov:" + x + ":" + y;SocketHelper.Send(message);}//设置按钮回归原点private void ContentPent_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){IsMove = false;CentX = hahax;CentY = hahay;}private void LayoutRoot_MouseLeave(object sender, MouseEventArgs e){IsMove = false;CentX = hahax;CentY = hahay;}private void LayoutRoot_MouseMove(object sender, MouseEventArgs e){mousePoint = e.GetPosition(ContentPent); //获取鼠标触点const int control = 40;//按钮移动范围         if (IsMove){double lengh = Math.Sqrt((hahax - mousePoint.X) * (hahax - mousePoint.X) + (hahay - mousePoint.Y) * (hahay - mousePoint.Y)); //计算触点到原点的距离int v = (int)lengh / 100;  //设置速度//根据范围 分别计算按钮移动的范围if (lengh < control){CentX = mousePoint.X;CentY = mousePoint.Y;}else if (mousePoint.X < hahax && mousePoint.Y < hahay){CentX = hahax - control * Math.Abs(hahax - mousePoint.X) / lengh;CentY = hahay - control * Math.Abs(hahay - mousePoint.Y) / lengh;}else if (mousePoint.X > hahax && mousePoint.Y < hahay){CentX = hahax + control * Math.Abs(hahax - mousePoint.X) / lengh;CentY = hahay - control * Math.Abs(hahay - mousePoint.Y) / lengh;}else if (mousePoint.X < hahax && mousePoint.Y > hahay){CentX = hahax - control * Math.Abs(hahax - mousePoint.X) / lengh;CentY = hahay + control * Math.Abs(hahay - mousePoint.Y) / lengh;}else if (mousePoint.X > hahax && mousePoint.Y > hahay){CentX = hahax + control * Math.Abs(hahax - mousePoint.X) / lengh;CentY = hahay + control * Math.Abs(hahay - mousePoint.Y) / lengh;}int x = (int)(hahax - mousePoint.X) / 10;int y = (int)(hahay - mousePoint.Y) / 10;if (v >= 1){ x *= v;y *= v;Submit("mov", x, y);  }else{Submit("mov", x, y);}}}private void RightButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){Submit("rid", 0, 0);}private void RightButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){Submit("riu", 0, 0);}private void LeftButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){Submit("led", 0, 0);}private void LeftButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){Submit("leu", 0, 0);}}
}

昨天通宵 边和妹子聊天编写程序 顺便把这个给完善了。。。

转载于:https://www.cnblogs.com/haorensw/archive/2012/03/24/2415719.html

Wpf拖动按钮实现(二)相关推荐

  1. WPF翻盘连连看(二)

    WPF翻盘连连看(二) 设计界面: window1.XAML代码: <Window x:Class="开心连连看.Window1"xmlns="http://sch ...

  2. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

  3. wpf 去除按钮点击时会画一个点线的矩形

    wpf 去除按钮点击时会画一个点线的矩形 最近在研究wpf,啥都不懂,特把自己查到的有用东西,收集一下: <Page xmlns="http://schemas.microsoft.c ...

  4. WPF圆角按钮与触发颜色变化

    原文:WPF圆角按钮与触发颜色变化 <Button x:Name="button1" Content="按钮1" Margin="10,10,0 ...

  5. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置bindi ...

  6. WPF RadioButton按钮控件取消选中设置

    WPF RadioButton按钮控件取消选中设置 通常我们使用的RadioButton控件选中之后就不能进行取消选中的操作,我上网查找到了解决方法,如下: 首先我们在View视图这里写这个按钮的点击 ...

  7. 课程表WPF制作 学习步骤二

    出于起步阶段的我,还是要再次强调一下边学边做,真的是需要专注不小的一段时间,加油加油~~~ 课程表制作的第二步: 制作开始界面并与课程表联系: 一.制作一个开始界面 新创建一个WPF项目,我的名字是C ...

  8. 潜移默化学会WPF(转载篇二)--退出应用程序

    WPF关闭应用程序方法 很多人认为关闭应用程序应该很简单,例如WindowsForm里一个Application.Exit();方法就可以解决问题,但在WPF里面可别滥用,因为WPF里Applicat ...

  9. WPF命中测试示例(二)——几何区域命中测试

    接续上次的命中测试,这次来做几何区域测试示例. 示例 首先新建一个WPF项目,在主界面中拖入一个按钮控件,并修改代码中的以下高亮位置: 当前设计视图界面如下: 接下来,转到窗体的"Windo ...

最新文章

  1. 【爬虫】-爬取食品检验结果
  2. Consumer接口练习之按要求打印信息
  3. php是做前端还是后端,在后端准备数据还是在前端操作? - php
  4. 网络资产管理系统_固定资产管理系统的三种网络架构方式
  5. 【树莓派学习笔记】五、处理、自动重命名并另存为图片
  6. 【FLink】Flink checkpoint 实现数据连续计算 恢复机制 案例实战
  7. 没有做数据备份 网站随时毁于一旦
  8. 两个多变量分布间的KL散度+变分子编码
  9. 【2022西电A测】温度检测控制仿真系统
  10. java.lang.NoClassDefFoundError: Could not initialize class com.cyj.util.Jdbc
  11. 计算机应用基础实训教程侯冬梅,计算机应用基础实训教程
  12. TaiShan服务器介绍
  13. 软件工程大作业进度报告
  14. 70.用Dnsmasq构建DNS服务器
  15. 用photoshop拼接一个七巧板图案
  16. [开源工具] svg图像编辑工具
  17. 485终端电阻接法(终端电阻1个防止信号反射 偏置电阻两个使0和1更加可靠)
  18. 用java写一个金字塔,一个Java写的用以构建影像金字塔的Bitmap类
  19. Arduino学习之PIR Sensor
  20. 语音识别转文字python

热门文章

  1. 绘制业务流程图:流程图绘制工具
  2. Java中Set巧用,去掉重复数据
  3. eLua学习第一课:和Lua的第一次亲密接触
  4. golang内置函数
  5. 汇编语言--CMOS RAM芯片
  6. innodb和myisam的区别
  7. lua源代码分析01:lua源代码结构分析
  8. tmpfs 内存文件系统
  9. Docker中运行EOS FOR MAC
  10. 面向对象先导课程——PART3