上一篇:使用Silverlight构建一个工作流设计器(二十)-增加标签(上)                                       
上节说到支持标签改名功能,本节继续增加以下功能:

l        支持选择,群组移动

l        支持粘贴、拷贝

l        支持删除

l        支持鼠标右键菜单

20.1支持选择,群组移动

为了支持标签选择,实现IsSelectd接口,如下所示:
  1. public bool IsSelectd
  2.         {
  3.             get
  4.             {
  5.                 return isSelectd;
  6.             }
  7.             set
  8.             {
  9.                 isSelectd = value;
  10.                 if (isSelectd)
  11.                 {
  12.                     SetSelectedColor();

  13.                     if (!_container.CurrentSelectedControlCollection.Contains(this))
  14.                         _container.AddSelectedControl(this);



  15.                 }
  16.                 else
  17.                 {
  18.                     ResetInitColor();
  19.                 }
  20.             }

  21.         }
复制代码
当用户选择标签的时候,更新标签颜色,并将标签对象加入到当前容器的“已选择”对象中,当用户取消选择时,重置标签颜色,并从容器对象中删除标签

为了支持标签群组移动,实现SetPositionByDisplacement接口,如下所示:
  1. public void SetPositionByDisplacement(double x, double y)
  2.         {


  3.             Point p = new Point();
  4.             p.X = (double)this.GetValue(Canvas.LeftProperty);
  5.             p.Y = (double)this.GetValue(Canvas.TopProperty);

  6.             this.SetValue(Canvas.TopProperty, p.Y + y);
  7.             this.SetValue(Canvas.LeftProperty, p.X + x);
  8.            

  9.         }
复制代码
这个接口根据位移来重新设置标签的位置。

20.2支持粘贴、拷贝

为了支持拷贝,需要实现Clone接口,如下所示:
  1. public  Label Clone()
  2.         {
  3.             Label l = new Label(_container);
  4.             l.LabelName = this.LabelName;
  5.             l.Position = this.Position;
  6.             return l;
  7.         }
复制代码
创建一个新的标签,并把当前标签的名称和位置信息赋值给新的标签。

粘贴的功能很简单,就是吧内存中的拷贝的对象添加到容器中显示出来即可。

20.3 支持删除

实现Delete接口就可以支持删除,为了显示删除时候的渐变效果使用一个Storyboard在指定的时间后删除对象,如下所示:
  1. public void Delete()
  2.         {


  3.             if (!isDeleted)
  4.             {
  5.                 isDeleted = true;
  6.                 canShowMenu = false;
  7.                 sbClose.Completed += new EventHandler(sbClose_Completed);
  8.                 sbClose.Begin();
  9.             }

  10.         }
复制代码
20.4 支持右键菜单

首先需要增加一个表示标签右键菜单的LabelMenu.xaml文件,如下所示:
  1. <UserControl x:Class="Shareidea.Web.UI.Control.Workflow.Designer.LabelMenu"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     MouseLeave="UserControl_MouseLeave"
  5.             MouseEnter="UserControl_MouseEnter">

  6.     <Border BorderBrush="Black" BorderThickness="1">
  7.         <StackPanel  >
  8.             <StackPanel.Resources>
  9.                 <Storyboard x:Name="sbShowMenu">
  10.                     <DoubleAnimation  From="0" To="50" Duration="00:00:0.2"
  11.                     Storyboard.TargetName="spContentMenu"
  12.                     Storyboard.TargetProperty="Height">
  13.                     </DoubleAnimation>
  14.                 </Storyboard>
  15.                 <Storyboard x:Name="sbCloseMenu">
  16.                     <DoubleAnimation  From="50" To="0" Duration="00:00:0.2"
  17.                     Storyboard.TargetName="spContentMenu"
  18.                     Storyboard.TargetProperty="Height">
  19.                     </DoubleAnimation>
  20.                 </Storyboard>
  21.             </StackPanel.Resources>
  22.             <StackPanel Name="spContentMenu"  Canvas.ZIndex="1000"  Canvas.Left="50" Canvas.Top="50" Background="WhiteSmoke"  >
  23.                 <HyperlinkButton  Name="btnDelete" Foreground="#000000" Margin="10 5 15 5"  FontSize="12"  Click="deleteLabel"  ClickMode="Release" Content="删除标签"  ></HyperlinkButton>
  24.                 <HyperlinkButton  Name="btnCopy"  Margin="10 0 15 5"  FontSize="12"  Foreground="#000000"      Click="copyLabel"  ClickMode="Release" Content="拷贝标签"    ></HyperlinkButton>

  25.             </StackPanel>
  26.         </StackPanel>
  27.     </Border>
  28. </UserControl>
复制代码
右键菜单有两个按钮,一个是删除标签,一个是拷贝标签,删除和拷贝的逻辑在上面已经实现了,只需要调用标签对应的方法即可。

本系列内容到此就结束了,有什么好的意见请给我留言,多谢!

源码下载

代码及数据库:
附件: 亲,您没有权限下载或查看附件喔:-) 试试登录注册吧!
1

评分次数

    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP

    深情顶帖,楼主加油!
    TOP