Silverlight WorkFlow画图--ArrowLine画线

Silverlight WorkFlow画图--ArrowLine画线,第1张

概述前面说了一下Activity控件 现在说一下ArrowLine画线控件 ArrowLine可以分为三部分:箭头、线、箭尾组成。 当点击Activity里面圆时,线就出来了,然后拖动,将箭头指向目标Activity控件里去 然后松开鼠标,这样一根线就画出来了。 如图所示: 当拖动开始节点Activity控件时,线的尾部坐标也得修改相应的坐标,同里当拖动结束节点Activity的时候,箭头的坐标也得及

前面说了一下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画线所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1069947.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存