建立獨立使用者控制項 RuleTurnPoint 代表控制點,僅包含一個綠色圓形(Ellipse),並處理滑鼠拖曳事件:
<UserControl x:Class="Shareidea.Web.UI.Control.Workflow.Designer.RuleTurnPoint"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
<Canvas>
<Canvas.Resources>
<Storyboard x:Name="sbDisplay">
<DoubleAnimation From="0" To="0.8" Duration="00:00:1.0"
Storyboard.TargetName="eliTurnPoint" Storyboard.TargetProperty="Opacity" />
</Storyboard>
<Storyboard x:Name="sbClose">
<DoubleAnimation From="0.8" To="0.0" Duration="00:00:1.0"
Storyboard.TargetName="eliTurnPoint" Storyboard.TargetProperty="Opacity" />
</Storyboard>
</Canvas.Resources>
<Ellipse Name="eliTurnPoint" Width="8" Height="8" Fill="Green" Opacity="0.8"
MouseLeftButtonDown="Canvas_MouseLeftButtonDown"
MouseLeftButtonUp="Canvas_MouseLeftButtonUp"
MouseMove="Canvas_MouseMove" />
</Canvas>
</UserControl>
規則類別內部維護兩個 RuleTurnPoint 實例,根據控制點位置重新計算貝茲曲線或折線幾何路徑。雙擊控制點時,自動將該點移至起迄點連線的中點,實現「自動對齊」。
CurrentSelectedControlCollection 儲存選取物件。KeyDown 偵測方向鍵與 Ctrl、Shift 修飾鍵,移動選取群組;Ctrl+A 全選、Ctrl+C/V 複製貼上、Delete 刪除、Ctrl+Z 復原。