程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 使用silverlight構建一個工作流設計器(十二)

使用silverlight構建一個工作流設計器(十二)

編輯:關於ASP.NET

源代碼下載: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文件夾下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved