使用silverlight构建一个工作流设计器(二十一)

作者:互联网   出处:控件中国网   2014-11-05 19:18:46   阅读:1

上节说到支持标签改名功能,本节继续增加以下功能:

l         支持选择,群组移动

l         支持粘贴、拷贝

l         支持删除

l         支持鼠标右键菜单

20.1支持选择,群组移动

为了支持标签选择,实现IsSelectd接口,如下所示:

 


public bool IsSelectd
        {
            
get
            {
                
return isSelectd;
            }
            
set
            {
                isSelectd 
= value;
                
if (isSelectd)
                {
                    SetSelectedColor();

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



                }
                
else
                {
                    ResetInitColor();
                }
            }

        }

 

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

为了支持标签群组移动,实现SetPositionByDisplacement接口,如下所示:

 


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在指定的时间后删除对象,如下所示:

 


public void Delete()
        {


            
if (!isDeleted)
            {
                isDeleted 
= true;
                canShowMenu 
= false
                sbClose.Completed 
+= new EventHandler(sbClose_Completed);
                sbClose.Begin();
            }

        }

20.4 支持右键菜单

首先需要增加一个表示标签右键菜单的LabelMenu.xaml文件,如下所示:

 


<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>

 

右键菜单有两个按钮,一个是删除标签,一个是拷贝标签,删除和拷贝的逻辑在上面已经实现了,只需要调用标签对应的方法即可。

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

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat