WPF 简单绘制矩形

Canvas 画矩形:
view和viewModel 绑定一起才显示移动轨迹(可以定义一个string  看是否绑定属性的路径是正确的)
前台(绑定事件和显示移动的线):

<Canvas Name="canvas" Background="#01FFFFFF" 
	PreviewMouseLeftButtonDown="VDM_MouseLeftButtonDown" 
	PreviewMouseMove="VDM_MouseMove"
	PreviewMouseLeftButtonUp="VDM_MouseLeftButtonUp">
</Canvas>

<Canvas>
	<Rectangle IsHitTestVisible="False" Stroke="Red" x:Name="rect"
		   StrokeDashArray="1,2" StrokeThickness="1" Stretch="Fill" 
		   Width="{Binding RectWidth}" 
		   Height="{Binding RectHeight}" 
		   Canvas.Left="{Binding RectLeft}" 
		   Canvas.Top="{Binding RectTop}"
		   />
</Canvas>

后台:

若view和其他viewmodel绑定了 可以用(rect.DataContext = Model;  DVMModel Model = new DVMModel();  DVMModel属性定义)
如果view和后台绑定:

bool is_LeftButtonDown = false;
 public void VDM_MouseLeftButtonDown(object view, MouseButtonEventArgs e)
{
	Canvas canvas = view as Canvas;
	Point pt = Mouse.GetPosition(canvas);
	downPt = pt;
	is_LeftButtonDown = true;
	if (pt.X < 0 || pt.X > canvas.ActualWidth || pt.Y < 0 || pt.Y > canvas.ActualHeight)
	{
		is_LeftButtonDown = false;
	}
}

鼠标移动绘制矩形

public void VDM_MouseMove(object view, MouseEventArgs e)
{
	//鼠标坐标点
	Point pt = Mouse.GetPosition(view as Canvas);
	if (is_LeftButtonDown && e.LeftButton == MouseButtonState.Pressed)	//确定鼠标左键处于按下状态
	{
		isMove = true;
		if (pt.X < 0 || pt.X > canvas.ActualWidth || pt.Y < 0 || pt.Y > canvas.ActualHeight)
		{
			is_LeftButtonDown = false;
			Model.RectHeight = 0;
			Model.RectWidth = 0;
		}
		else
		{
			double left = (downPt.X < pt.X) ? downPt.X : pt.X;
			double top = (downPt.Y < pt.Y) ? downPt.Y : pt.Y;
			double width = Math.Abs(downPt.X - pt.X);
			double height = Math.Abs(downPt.Y - pt.Y);

			// 画矩形
			Model.RectLeft = left;
			Model.RectTop = top;
			Model.RectWidth = width;
			Model.RectHeight = height;
			canvas.CaptureMouse();	//捕获鼠标
		}
	}
}

鼠标弹起完成矩形绘制

public void VDM_MouseLeftButtonUp(object view, MouseButtonEventArgs e)
{
	Canvas canvas = view as Canvas;
	if (is_LeftButtonDown && isMove)
	{
		is_LeftButtonDown = false;
		isMove = false;
		Point pt = Mouse.GetPosition(canvas);

		double Wscale = canvas.ActualWidth / SingalSize.Width;		//SingalSize 分辨率
		double Hscale = canvas.ActualHeight / SingalSize.Height;

		double left = (downPt.X < pt.X) ? downPt.X : pt.X;
		double top = (downPt.Y < pt.Y) ? downPt.Y : pt.Y;
		double width = Math.Abs(pt.X - downPt.X);
		double height = Math.Abs(pt.Y - downPt.Y);

		OsdStartX.Text = Convert.ToInt32(left).ToString();
		OsdStartY.Text = Convert.ToInt32(top).ToString();

		if (width * Wscale > 512)
			HLength.Text = "512";
		else
			HLength.Text = Convert.ToInt32(width * Wscale).ToString();

		if (height * Hscale > 64)
			VLength.Text = "64";
		else
			VLength.Text = Convert.ToInt32(height * Hscale).ToString();
		// 画矩形
		Model.RectHeight = 0;
		Model.RectWidth = 0;
		canvas.ReleaseMouseCapture();	//释放捕获鼠标
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值