最近不断出差,设计器功能更新很慢,抱歉。今天把新增的标签功能说一下吧。
在规则中,为了对规则进行说明,可以给规则类增加一个TextBlack来对规则进行注释,之前的程序也是这么做的,如下图所示:
但是这样的注释有一个缺点,不能手动调整位置,而是只能根据规则的位置自动设置本文的位置,有时候这个自动设置的位置不是我们希望的位置。为了解决这个问题,我们对工作流的配置增加一个“标签”类,这个类是独立于规则之外的,专门用于对规则进行注释说明的类。另外,这个标签只是用于工作流图形的显示,并不涉及到流程属性,因为不需要做存储到数据库的方法,只保存在xml配置文件里面就可以了。
20.1 增加标签类
在vs.net中新建一个xaml文件,将文件名称修改为Label.xaml,这个类就是我们的标签类,这个类中有两个主要的内容,如下所示:
<UserControl x:Class="Shareidea.Web.UI.Control.Workflow.Designer.Label"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MouseLeftButtonDown="UserControl_MouseLeftButtonDown"
MouseMove="UserControl_MouseMove"
MouseLeftButtonUp="UserControl_MouseLeftButtonUp"
MouseLeave="UserControl_MouseLeave"
Width="400" Height="20">
<Grid x:Name="LayoutRoot" Background="Transparent" >
<TextBlock Name="txtLabelName" ></TextBlock>
<TextBox Name="tbLabelName" TextChanged="TextBox_TextChanged" Visibility="Collapsed"></TextBox>
</Grid>
</UserControl>
其中,TextBlock用于显示标签名称,TextBox用以编辑标签名称。
这个类有以下几个重要的属性:
l 支持拖拽布局
l 支持导入、导出xml信息
l 支持修改标签名称
l 支持选择,群组移动
l 支持粘贴、拷贝
l 支持删除
l 支持鼠标右键菜单
本节将具体说明其中的几个。
20.2 支持拖拽
支持拖拽的功能在前下面的活动和规则类的编写时候已经做了类似的工作,主要就是监控三个事件
UserControl_MouseLeftButtonDown
UserControl_MouseMove,
UserControl_MouseLeftButtonUp
具体这里不再赘述,可参考源代码内容
20.3 支持导入导出xml
20.3.1 导出xml
导出xml的很简单,如下所示:
public string ToXmlString()
{
if(!isDeleted)
return @"<Label X=""" + Position.X.ToString() + @""" Y=""" + Position.Y.ToString() + @"""><![CDATA[" + LabelName + "]]></Label>";
return "";
}
只需要记录标签的名称和位置信息就可以了。
20.3.2 导入xml
根据xml信息导入标签也很简单,分析xml内容,动态构造标签,加入到容器中即可,如下所示:
Code
partNos = from item in xele.Descendants("Label") select item;
string labelName="";
double labelX=0;
double labelY = 0;
foreach (XElement node in partNos)
{
labelName = node.Value;
double.TryParse(node.Attribute(XName.Get("X")).Value, out labelX);
double.TryParse(node.Attribute(XName.Get("Y")).Value, out labelY);
Label l = new Label(this);
l.LabelName = labelName;
l.Position = new Point(labelX, labelY);
AddLabel(l);
}
20.4 支持标签改名
标签只有一个显示名称,并没有特别复杂的属性,因此,可以直接在界面上进行标签名称的修改,而不必再作一个标签的属性页来修改。标签类中的TextBox和TextBlock也正是为此目的设立的。
默认的,TextBlock是显示状态,而TextText是隐藏状态,当鼠标双击标签时,TextBlock隐藏,而TextBox显示,这样就可以让用户编辑标签名称,当鼠标移出标签类时,TextBlock是显示状态,而TextText是隐藏状态。
本章的内容就到这里,下一张将继续完成整个标签类