
前面说了一下Activity控件
现在说一下Arrowline画线控件
Arrowline可以分为三部分:箭头、线、箭尾组成。
当点击Activity里面圆时,线就出来了,然后拖动,将箭头指向目标Activity控件里去
然后松开鼠标,这样一根线就画出来了。
如图所示:
当拖动开始节点Activity控件时,线的尾部坐标也得修改相应的坐标,同里当拖动结束节点Activity的时候,箭头的坐标也得及时更新位置
当不想要线的时候,可以点击线的右键,然后将线删除。
Arrowline控件的xaml描述如下:
<Canvas x:name="LayoutRoot" Background="White"> <line x:name="Cap"> <line.Rendertransform> <Rotatetransform x:name="CapRotatetransform" /> </line.Rendertransform> </line> <line x:name="Connector" /> <line x:name="Foot"> <line.Rendertransform> <Rotatetransform x:name="FootRotatetransform" /> </line.Rendertransform> </line> <TextBox name="txtComment" Visibility="Collapsed" Text="请输入说明..." textwrapPing="Wrap" AcceptsReturn="True" VerticalScrollbarVisibility="auto" HorizontalScrollbarVisibility="auto" /> </Canvas >
Arrowline控件的cs代码如下:
下面里的代码有从网上摘出来的,修改了一下。
public partial class Arrowline : UserControl,IArrowline { /// <summary> /// 删除箭头 /// </summary> public event RoutedEventHandler Deleteline; Point startPoint; Point endPoint; /// <summary> /// 右键菜单 /// </summary> ContextMenu _cmenu = new ContextMenu(); string _lineGuID; /// <summary> /// 线的GUID值 /// </summary> public string lineGuID { get { return _lineGuID; } set { _lineGuID = value; } } /// <summary> /// 箭头尾部所在的控件 /// </summary> public UIElement ArrowFootControl { get; set; } /// <summary> /// 箭头头部所在的控件 /// </summary> public UIElement ArrowCapControl { get; set; } /// <summary> /// 开始坐标 /// </summary> public Point StartPoint { get { return startPoint; } set { startPoint = value; Update(); } } /// <summary> /// 结束坐标 /// </summary> public Point EndPoint { get { return endPoint; } set { endPoint = value; Update(); } } public Arrowline() { InitializeComponent(); MenuItem mi = new MenuItem(); mi.Click += new RoutedEventHandler(mi_Click); mi.header = "删除"; mi.Tag = "delete"; _cmenu.Items.Add(mi); _cmenu.Visibility = System.windows.Visibility.Collapsed; mi = new MenuItem(); mi.Click += new RoutedEventHandler(mi_Click); mi.header = "说明"; mi.Tag = "Comment"; _cmenu.Items.Add(mi); this.MouseRightbuttonDown += new MousebuttonEventHandler(Arrowline_MouseRightbuttonDown); this.txtComment.LostFocus += new RoutedEventHandler(txtComment_LostFocus); this.LayoutRoot.Children.Add(_cmenu); } voID txtComment_LostFocus(object sender,RoutedEventArgs e) { if (txtComment.Text.IsNullOrEmpty() || txtComment.Text.Equals("请输入说明...")) { txtComment.Visibility = System.windows.Visibility.Collapsed; } else { txtComment.IsEnabled = false; } } voID Arrowline_MouseRightbuttonDown(object sender,MousebuttonEventArgs e) { e.Handled = true; var p = e.Getposition(sender as UIElement); Canvas.Setleft(_cmenu,p.X); Canvas.Settop(_cmenu,p.Y); _cmenu.Visibility = System.windows.Visibility.Visible; } voID mi_Click(object sender,RoutedEventArgs e) { MenuItem mi = sender as MenuItem; string state = mi.Tag.ToString(); switch (state) { case "delete": if (null != Deleteline) { Deleteline(this,e); } break; case "Comment": txtComment.IsEnabled = true; txtComment.Visibility = System.windows.Visibility.Visible; break; } _cmenu.Visibility = System.windows.Visibility.Collapsed; } /// <summary> /// 结构函数 /// </summary> /// <param name="startPoint">开始坐标</param> /// <param name="endPoint">结束坐标</param> public Arrowline(Point startPoint,Point endPoint) : this() { this.startPoint = startPoint; this.endPoint = endPoint; Update(); } /// <summary> /// 更新 /// </summary> private voID Update() { double angleOfline = Math.atan2((endPoint.Y - startPoint.Y),(endPoint.X - startPoint.X)) * 180 / Math.PI; Connector.X1 = startPoint.X; Connector.Y1 = startPoint.Y; Connector.X2 = endPoint.X; Connector.Y2 = endPoint.Y; Connector.strokeThickness = 1; Connector.stroke = new SolIDcolorBrush(colors.Black); Cap.X1 = (startPoint.X + endPoint.X) / 2; Cap.Y1 = (startPoint.Y + endPoint.Y) / 2; Cap.X2 = (startPoint.X + endPoint.X) / 2; Cap.Y2 = (startPoint.Y + endPoint.Y) / 2; Cap.strokeEndlineCap = PenlineCap.Triangle; Cap.strokeThickness = 20; Cap.stroke = new SolIDcolorBrush(colors.Black); CapRotatetransform.Angle = angleOfline; CapRotatetransform.CenterX = (this.StartPoint.X + this.endPoint.X) / 2; CapRotatetransform.CenterY = (this.StartPoint.Y + this.endPoint.Y) / 2; Foot.X1 = endPoint.X; Foot.Y1 = endPoint.Y; Foot.X2 = endPoint.X; Foot.Y2 = endPoint.Y; Foot.strokeEndlineCap = PenlineCap.Triangle; Foot.strokeThickness = 20; Foot.stroke = new SolIDcolorBrush(colors.Black); FootRotatetransform.Angle = angleOfline; FootRotatetransform.CenterX = this.EndPoint.X; FootRotatetransform.CenterY = this.EndPoint.Y; Canvas.Setleft(txtComment,(this.endPoint.X + this.startPoint.X) / 2); Canvas.Settop(txtComment,(this.endPoint.Y + this.startPoint.Y) / 2); } /// <summary> /// 释放内存 /// </summary> public voID dispose() { try { foreach (var v in _cmenu.Items) { MenuItem mi = v as MenuItem; if (null == mi) { continue; } mi.Click -= mi_Click; } this.MouseRightbuttonDown -= Arrowline_MouseRightbuttonDown; this.txtComment.LostFocus -= txtComment_LostFocus; } catch { } } /// <summary> /// 导出描述线信息 /// </summary> /// <returns></returns> public string ExportLocation() { ArrowlineInfo ail = new ArrowlineInfo(); ail.Type = this.GetType().name; ail.name = this.name; ail.GuID = this.lineGuID; ail.StartX = StartPoint.X; ail.StartY = StartPoint.Y; ail.EndX = EndPoint.X; ail.EndY = EndPoint.Y; var aa = ail.ToXElement("Arrowline"); return aa.ToString(); } } 总结 以上是内存溢出为你收集整理的Silverlight WorkFlow画图--ArrowLine画线全部内容,希望文章能够帮你解决Silverlight WorkFlow画图--ArrowLine画线所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)