源代碼下載:http://www.shareidea.net/opensource.htm
在線演示:http://www.shareidea.net/workflow.htm
視頻教程: http://www.shareidea.net/video/sharedesigner/sharedesigner.html
本章包含以下內容:
l 新的活動圖形,圖形更加清晰漂亮.
l 增加對上下左右鍵的支持(選中活動或者規則後,使用方向鍵進行移動,按住Ctrl時,每次移動的距離加大).不過有一個問題,無法捕獲方向鍵的按下事件,卻能捕獲松開鼠標事件,不知為何
l 實現我們第十章講到的變化皮膚的方法。
本章上面的兩點更新沒有什麼值的要說的,下面實現我們在第十章講的變幻皮膚的方法,
如果您還不了解變幻皮膚的原理,請參考第十章的內容。
八、實現更換皮膚功能
我們對Activity.Xaml類來做試驗,步驟如下:
1.首先我們把Activity.g.cs(位於obj"Debug"Designer文件夾下)中的類變量和InitializeComponent方法拷貝的Activity.xaml.cs文件中。這些代碼如下所示:
internal System.Windows.Controls.Canvas container;
internal System.Windows.Controls.ToolTip ttActivityTip;
internal System.Windows.Shapes.Ellipse eiCenterEllipse;
internal Shareidea.Web.UI.Control.Workflow.Designer.ActivityPictureContainer sdPicture;
private bool _contentLoaded;
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent()
{
if (_contentLoaded)
{
return;
}
_contentLoaded = true;
System.Windows.Application.LoadComponent(this, new System.Uri("/ShareDesigner;component/Designer/Activity.xaml", System.UriKind.Relative));
this.container = ((System.Windows.Controls.Canvas)(this.FindName("container")));
this.ttActivityTip = ((System.Windows.Controls.ToolTip)(this.FindName("ttActivityTip")));
this.eiCenterEllipse = ((System.Windows.Shapes.Ellipse)(this.FindName("eiCenterEllipse")));
this.sdPicture = ((Shareidea.Web.UI.Control.Workflow.Designer.ActivityPictureContainer)(this.FindName("sdPicture")));
}
2.然後編譯代碼,這時候會發生錯誤,說已經存在了相同的變量和方法。這是因為在Activity.xaml.cs和Activity.g.cs文件中存在了相同的代碼。我們把Activity.g.cs內容全部刪除,再次編譯,ok,通過了。
3.雖然編譯通過了,但是InitializeComponent代碼卻無法設置斷點,原因是設置了屬性
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
這個屬性用以表示標識不屬於應用程序用戶代碼的類型或成員,這個屬性告訴vs.net調試機制不會進入這一段代碼。我們把這個屬性注釋掉,然後再運行就可以了。
4.接下來創建一個新的activity皮膚文件。通過vs.net類浏覽器,我們拷貝Activity.xaml文件,並且拷貝的新文件命名為Activity2.xaml.
5.然後編譯代碼,發生錯誤,因為自動生成的Activity2.g.cs文件中包含了一些代碼,我們把Activity2.g.cs清空,然後再編譯。Ok,通過。
6.修改一下Activity2.xaml的樣式,以區別於Activity.xaml。
7.修改Activity.xaml.cs文件中的 System.Windows.Application.LoadComponent(this, new System.Uri("/ShareDesigner;component/Designer/Activity.xaml", System.UriKind.Relative))方法,把/Activity.xaml修改為/Activity2.xaml,使得載入新的皮膚Activity2.xaml文件。
最後運行代碼,可以看到,使用新的Activity2.xaml文件了。
這樣我們就可以通過改變System.Windows.Application.LoadComponent的第二個參數來動態的載入指定的皮膚。
到此為止,我們已經完成了一個變幻皮膚的代碼。不過還有一些可以深入思考的地方。
1、如果有很多皮膚,那麼不希望用戶在第一次加載的時候就下載所有的皮膚文件,這樣會增加用戶等待時間,如果能動態從網絡上下載xmal代碼就好了,不過還沒有找到這個方法。
2、上面的方法並沒有使得.xmal和xaml.cs文件失去關聯,我們可以手工剪切xaml.cs文件到其它文件吧,而把皮膚文件(.xmal文件)放在單獨的文件夾中,便於管理。
3、自動生成的.g.cs文件能不能去掉呢?這個文件是在編譯時候自動生成的,位於obj"Debug"Designer文件夾下。