拼吾爱程序人生

首页»  Silverlight»  使用Silverlight构建一个工作流设计器(二十)-增加标签(上)
cobra - 2009-9-2 12:32:00
上一篇:使用Silverlight构建一个工作流设计器(十九)-规则与活动的交点的平滑移动

在规则中,为了对规则进行说明,可以给规则类增加一个TextBlack来对规则进行注释,之前的程序也是这么做的,如下图所示:


附件: workflowdesigner_24.jpg

但是这样的注释有一个缺点,不能手动调整位置,而是只能根据规则的位置自动设置本文的位置,有时候这个自动设置的位置不是我们希望的位置。为了解决这个问题,我们对工作流的配置增加一个“标签”类,这个类是独立于规则之外的,专门用于对规则进行注释说明的类。另外,这个标签只是用于工作流图形的显示,并不涉及到流程属性,因为不需要做存储到数据库的方法,只保存在xml配置文件里面就可以了。

20.1 增加标签类

在vs.net中新建一个xaml文件,将文件名称修改为Label.xaml,这个类就是我们的标签类,这个类中有两个主要的内容,如下所示:
  1. <UserControl x:Class="Shareidea.Web.UI.Control.Workflow.Designer.Label"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.             MouseLeftButtonDown="UserControl_MouseLeftButtonDown"
  5.             MouseMove="UserControl_MouseMove"
  6.               MouseLeftButtonUp="UserControl_MouseLeftButtonUp"
  7.             MouseLeave="UserControl_MouseLeave"
  8.     Width="400" Height="20">
  9.     <Grid x:Name="LayoutRoot"    Background="Transparent" >
  10.         <TextBlock Name="txtLabelName"    ></TextBlock>
  11.         <TextBox Name="tbLabelName"  TextChanged="TextBox_TextChanged"  Visibility="Collapsed"></TextBox>
  12.     </Grid>
  13. </UserControl>
复制代码
其中,TextBlock用于显示标签名称,TextBox用以编辑标签名称。

这个类有以下几个重要的属性:


本节将具体说明其中的几个。

20.2 支持拖拽

支持拖拽的功能在前下面的活动和规则类的编写时候已经做了类似的工作,主要就是监控三个事件

UserControl_MouseLeftButtonDown

UserControl_MouseMove,

UserControl_MouseLeftButtonUp

具体这里不再赘述,可参考源代码内容

20.3 支持导入导出xml

20.3.1 导出xml

导出xml的很简单,如下所示:
  1. public string ToXmlString()
  2.         {
  3.             if(!isDeleted)
  4.                 return @"<Label X=""" + Position.X.ToString() + @""" Y=""" + Position.Y.ToString() + @"""><![CDATA[" + LabelName + "]]></Label>";
  5.             return "";
  6.         }
复制代码
只需要记录标签的名称和位置信息就可以了。

20.3.2 导入xml

根据xml信息导入标签也很简单,分析xml内容,动态构造标签,加入到容器中即可,如下所示:
  1. partNos = from item in xele.Descendants("Label") select item;
  2.             string labelName="";
  3.             double labelX=0;
  4.             double labelY = 0;
  5.             foreach (XElement node in partNos)
  6.             {

  7.                 labelName = node.Value;

  8.                 double.TryParse(node.Attribute(XName.Get("X")).Value, out labelX);
  9.                 double.TryParse(node.Attribute(XName.Get("Y")).Value, out labelY);


  10.                 Label l = new Label(this);
  11.                 l.LabelName = labelName;
  12.                 l.Position = new Point(labelX, labelY);
  13.                 AddLabel(l);
  14.             }
复制代码
20.4 支持标签改名

标签只有一个显示名称,并没有特别复杂的属性,因此,可以直接在界面上进行标签名称的修改,而不必再作一个标签的属性页来修改。标签类中的TextBox和TextBlock也正是为此目的设立的。

默认的,TextBlock是显示状态,而TextText是隐藏状态,当鼠标双击标签时,TextBlock隐藏,而TextBox显示,这样就可以让用户编辑标签名称,当鼠标移出标签类时,TextBlock是显示状态,而TextText是隐藏状态。

本章的内容就到这里,下一张将继续完成整个标签类。(文/chegan

下一篇:使用Silverlight构建一个工作流设计器(二十一)-增加标签(下)     
                               
源码下载

代码及数据库:


附件: 下载地址

附件: 下载地址
Silverlight栏目的最新浏览文章:
• Silverlight基于WCF双工以及.NET TCP协议即时通讯系统
• Silverlight 4 离线简体中文版帮助文档
• 使用Silverlight构建一个工作流设计器(十六)-持久化数据到数据库—数据库结构
• 最新Microsoft Expression Studio 3破解
• 微软Expression Blend 3中文教程
• 【Silverlight】利用IsolatedStorageFile实现客户端缓存
• Silverlight 的弹出窗体--展示
• Silverlight 4中使用MEF实现页面的动态装配
• Silverlight实现360度全景展示效果
• Pro Business Applications with Silverlight 4
• Silverlight实时3D渲染引擎:SilverMotion
• Silverlight中把WriteableBitmap转为Byte流并保存到本地
• Silverlight 图片局部放大效果
• Silverlight 4 User Interface Cookbook
• Silverlight 相册DEMO--ImageSnipper(V2)
• 通过动态构造实体在Silverlight 中给DataGrid 绑定数据
查看完整版本: 使用Silverlight构建一个工作流设计器(二十)-增加标签(上)