当前位置:网站首页>WPF 截图控件之绘制箭头(五)「仿微信」
WPF 截图控件之绘制箭头(五)「仿微信」
2022-08-05 17:31:00 【yanjinhua】
WPF 截图控件之绘制箭头(五)「仿微信」
WPF 截图控件之绘制箭头(五)「仿微信」
作者:WPFDevelopersOrg
原文链接: https://github.com/WPFDevelopersOrg/WPFDevelopers
接着上周写的截图控件继续更新 绘制箭头。
1.WPF实现截屏「仿微信」
2.WPF 实现截屏控件之移动(二)「仿微信」
3.WPF 截图控件之伸缩(三) 「仿微信」
4.WPF 截图控件之绘制方框与椭圆(四) 「仿微信」
正文
一、首先接着ScreenCut继续发电。
1)绘制箭头因为需要只修改箭头的尾部顶部不修改大小所以需要两个Path 需要定义Grid容器分为两列第一列 尾部 宽度设置***** 第二列设置固定宽度15 。 
<ControlTemplate x:Key="PART_DrawArrow" TargetType="{x:Type Control}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="15"/>
</Grid.ColumnDefinitions>
<Path Data="{StaticResource PathArrowBranches}"
Fill="{TemplateBinding Background}" Height="8"
Stretch="Fill"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="0,0,-7,0"/>
<Path Data="{StaticResource PathArrow}"
Fill="{TemplateBinding Background}"
Width="15" Height="15"
Stretch="Fill"
Grid.Column="1"/>
</Grid>
</ControlTemplate>
2)依据鼠标起点PART_DrawArrow设置Left与Top的位置, 接着设置转换RenderTransformOrigin中心点为new Point(0, .5) 鼠标移动的角度赋值给RotateTransform.Angle就可以让箭头部跟着鼠标旋转
同时还需去修改controlArrow的宽度在修改宽度的时候这里当你绘制的是斜线或者角度就需要求平方根给宽。


void DrawArrowControl(Point current)
{
CheckPoint(current);
if (screenCutMouseType != ScreenCutMouseType.DrawArrow)
return;
var drawArrow = new Rect(pointStart, current);
if (controlArrow == null)
{
controlArrow = new Control();
controlArrow.Background = _currentBrush == null ? Brushes.Red : _currentBrush;
controlArrow.Template = controlTemplate;
_canvas.Children.Add(controlArrow);
Canvas.SetLeft(controlArrow, drawArrow.Left);
Canvas.SetTop(controlArrow, drawArrow.Top - 7.5);
}
var rotate = new RotateTransform();
var renderOrigin = new Point(0, .5);
controlArrow.RenderTransformOrigin = renderOrigin;
controlArrow.RenderTransform = rotate;
rotate.Angle = ControlsHelper.CalculeAngle(pointStart, current);
var x = current.X - pointStart.X;
var y = current.Y - pointStart.Y;
var width = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));
controlArrow.Width = width;
}
3)根据两个点获取角度代码
private double CalculeAngle(Point start, Point arrival)
{
var radian = Math.Atan2((arrival.Y - start.Y), (arrival.X - start.X));
var angle = (radian * (180 / Math.PI) + 360) % 360;
return angle;
}
完整代码如下
ScreenCut GitHub[1] ScreenCut.xaml Gitee[2] ScreenCut Gitee[3] ScreenCut.xaml Gitee[4]
三、运行效果如下
项目地址
框架名:WPFDevelopers 作者:WPFDevelopers 参与者:吴锋、闫佳慧 GitHub[5] Gitee[6]
参考资料
ScreenCut GitHub: https://github.com/WPFDevelopersOrg/WPFDevelopers/blob/master/src/WPFDevelopers/Controls/ScreenCut/ScreenCut.cs
[2]ScreenCut.xaml Gitee: https://github.com/WPFDevelopersOrg/WPFDevelopers/blob/master/src/WPFDevelopers/Themes/ScreenCut.xaml
[3]ScreenCut Gitee: https://gitee.com/WPFDevelopersOrg/WPFDevelopers/blob/master/src/WPFDevelopers/Controls/ScreenCut/ScreenCut.cs
[4]ScreenCut.xaml Gitee: https://gitee.com/WPFDevelopersOrg/WPFDevelopers/blob/master/src/WPFDevelopers/Themes/ScreenCut.xaml
[5]GitHub:: https://github.com/WPFDevelopersOrg
[6]Gitee:: https://gitee.com/WPFDevelopersOrg
边栏推荐
- How WPF+SkiaSharp implements self-drawn shooting game
- AIRIOT答疑第7期|如何快速提升物联网项目交付速度?
- 【云原生Kubernetes系列】KubeSphere容器调度平台
- 【2012】【论文笔记】超材料的二维等价物——GSTC
- 借生态力量,openGauss突破性能瓶颈
- 为什么那么多人劝退软件测试?月薪1万以上的就别点进来了
- What is the future trend of software testing jobs?
- cpalgotithm安装大坑
- Fragment so many APIs are abandoned
- CDH 运维中遇到的问题
猜你喜欢

PG 的 statistics 与 extended statistics

数学建模文写作----个人笔记

App与Hap、Entry与feature,bundleName与packge,务必弄明白

新一代主机安全4大核心技术和15大应用场景

对非均匀采样信号进行重采样

ERMiner: Sequential Rule Mining Using Equivalence Classes

AIRIOT答疑第7期|如何快速提升物联网项目交付速度?

牛客网剑指offer之二分查找

4-Arm PEG-DSPE,MW:2000,四臂-聚乙二醇-磷脂仅供科研实验使用

科研实习 | 北京大学万小军老师课题组招收NLP方向实习生和访问学生
随机推荐
AI目标分割能力,无需绿幕即可实现快速视频抠图
SELECT
8.lnmp架构
How to activate the latest version of IntelliJ IDEA 2022.2
2022 Week 4 Global AI Model Weekly Report
VSCode使用简介
力扣623.在二叉树中增加一行 dfs
借生态力量,openGauss突破性能瓶颈
【云计算概念】IaaS、PaaS、SaaS、CaaS、MaaS的区别
【访谈】Eotalk Vol.02:从极客到 CEO,开发者应该如何提升技术领导力?
Excel中的七个简单粗暴的技巧!
Sentinel链路模式规则无效
js实现下拉菜单 人性化体验
SwiftUI 教程之使用 DocumentGroup 和 FileDocument 创建基于文本文档的应用程序
Stream流详解
cpalgotithm安装大坑
华为计算开源总经理堵俊平:AI领域开源新趋势与思考
1、要了解sorted函数的key参数
认识一下MRS里的“中间人”Alluxio
【OAuth2】九、资源服务器