源代码下载:http://www.shareidea.net/opensource.htm
在线演示:http://www.shareidea.net/workflow.htm
视频教程: http://www.shareidea.net/video/sharedesigner/sharedesigner.html
QQ群:85444465
本文系列索引:
使用silverlight构建一个工作流设计器(一)
使用silverlight构建一个工作流设计器(二)
使用silverlight构建一个工作流设计器(三)
使用silverlight构建一个工作流设计器(四)
使用silverlight构建一个工作流设计器(五)
使用silverlight构建一个工作流设计器(六)
使用silverlight构建一个工作流设计器(七)
使用silverlight构建一个工作流设计器(八)
使用silverlight构建一个工作流设计器(九)
使用silverlight构建一个工作流设计器(十)
使用silverlight构建一个工作流设计器(十一)
使用silverlight构建一个工作流设计器(十二)
使用silverlight构建一个工作流设计器(十三)
使用silverlight构建一个工作流设计器(十四)
使用silverlight构建一个工作流设计器(十五)
使用silverlight构建一个工作流设计器(十六)
使用silverlight构建一个工作流设计器(十七)
使用silverlight构建一个工作流设计器(十八)
使用silverlight构建一个工作流设计器(十九)
使用silverlight构建一个工作流设计器(二十)
上节说到支持标签改名功能,本节继续增加以下功能:
l 支持选择,群组移动
l 支持粘贴、拷贝
l 支持删除
l 支持鼠标右键菜单
20.1支持选择,群组移动
为了支持标签选择,实现IsSelectd接口,如下所示:
Code
public bool IsSelectd
{
get
{
return isSelectd;
}
set
{
isSelectd = value;
if (isSelectd)
{
SetSelectedColor();
if (!_container.CurrentSelectedControlCollection.Contains(this))
_container.AddSelectedControl(this);
}
else
{
ResetInitColor();
}
}
}
当用户选择标签的时候,更新标签颜色,并将标签对象加入到当前容器的“已选择”对象中,当用户取消选择时,重置标签颜色,并从容器对象中删除标签
为了支持标签群组移动,实现SetPositionByDisplacement接口,如下所示:
Code
public void SetPositionByDisplacement(double x, double y)
{
Point p = new Point();
p.X = (double)this.GetValue(Canvas.LeftProperty);
p.Y = (double)this.GetValue(Canvas.TopProperty);
this.SetValue(Canvas.TopProperty, p.Y + y);
this.SetValue(Canvas.LeftProperty, p.X + x);
}
这个接口根据位移来重新设置标签的位置。
20.2支持粘贴、拷贝
为了支持拷贝,需要实现Clone接口,如下所示:
public Label Clone()
{
Label l = new Label(_container);
l.LabelName = this.LabelName;
l.Position = this.Position;
return l;
}
创建一个新的标签,并把当前标签的名称和位置信息赋值给新的标签。
粘贴的功能很简单,就是吧内存中的拷贝的对象添加到容器中显示出来即可。
20.3 支持删除
实现Delete接口就可以支持删除,为了显示删除时候的渐变效果使用一个Storyboard在指定的时间后删除对象,如下所示:
Code
public void Delete()
{
if (!isDeleted)
{
isDeleted = true;
canShowMenu = false;
sbClose.Completed += new EventHandler(sbClose_Completed);
sbClose.Begin();
}
}
20.4 支持右键菜单
首先需要增加一个表示标签右键菜单的LabelMenu.xaml文件,如下所示:
Code
<UserControl x:Class="Shareidea.Web.UI.Control.Workflow.Designer.LabelMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MouseLeave="UserControl_MouseLeave"
MouseEnter="UserControl_MouseEnter">
<Border BorderBrush="Black" BorderThickness="1">
<StackPanel >
<StackPanel.Resources>
<Storyboard x:Name="sbShowMenu">
<DoubleAnimation From="0" To="50" Duration="00:00:0.2"
Storyboard.TargetName="spContentMenu"
Storyboard.TargetProperty="Height">
</DoubleAnimation>
</Storyboard>
<Storyboard x:Name="sbCloseMenu">
<DoubleAnimation From="50" To="0" Duration="00:00:0.2"
Storyboard.TargetName="spContentMenu"
Storyboard.TargetProperty="Height">
</DoubleAnimation>
</Storyboard>
</StackPanel.Resources>
<StackPanel Name="spContentMenu" Canvas.ZIndex="1000" Canvas.Left="50" Canvas.Top="50" Background="WhiteSmoke" >
<HyperlinkButton Name="btnDelete" Foreground="#000000" Margin="10 5 15 5" FontSize="12" Click="deleteLabel" ClickMode="Release" Content="删除标签" ></HyperlinkButton>
<HyperlinkButton Name="btnCopy" Margin="10 0 15 5" FontSize="12" Foreground="#000000" Click="copyLabel" ClickMode="Release" Content="拷贝标签" ></HyperlinkButton>
</StackPanel>
</StackPanel>
</Border>
</UserControl>
右键菜单有两个按钮,一个是删除标签,一个是拷贝标签,删除和拷贝的逻辑在上面已经实现了,只需要调用标签对应的方法即可。
本节内容到此就结束了,有什么好的意见请给我留言,多谢!