WPF 與XBAP應用程式(1)

文:吳俊毅
時間:2009/1/1
開發環境: Visual Studio 2008 Team System

今年未去迎接2009年的第一道曙光,且筆者很久沒寫作文章了,所以想說寫一些關於WPF與XBAP應用程式

所謂的XBAP為(XAML Browser Application)的簡稱,他本身即是WPF應用程式,唯一不同於Window Form的WPF應用程式的是它是以Browser為Container,但是它執行的機器必須是有安裝.NET Framework 3.0的機器才可以執行,且IE7預設即為XBAP的Container,若您使用Visual Studio 2008 開啟一個WpfBrowserApplication專案並打開Page1的CS檔案會發現他是繼承Page這個類別,如下:
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}
}

而本篇文章為了測試我們撰寫的WPF應用程式能夠順利的移植到XBAP方式在Browser中執行嗎?以下為筆者先全撰寫的一WPF的Brush測試程式,當中有TextBox, Ellipse等相關元件,主要是測試WPF中的TextBox的ImageBrush筆刷的繪圖功能,有興趣的讀者請參考筆者另一篇WPF程式設計的文章,接著來看看這個範例:

此範例程式執行結果如下:

圖中的上面是一個TextBox控制項,使用圖片作為TextBox的底色,且字體也使用圖片作為筆刷,而呈現出來的效果,現在如果要將一改以XBAP應用程式方式執行會是什麼樣的結果呢,首先新增一個WpfBrowserApplication專案,並將下面藍色部分,也就是..標籤內的內容複製到WpfBrowserApplication專案的Page1.xaml的Grid中。



接著在預覽畫面也可以看見結果,如下圖:


接著我們就直接執行程式,執行後會發生一個錯誤,如下:

讀者應該也會收到此錯誤,這是因為在Browser的Container中預設XBAP應用程式是沒有存取IO的權限的,為什麼獨立的WPF執行檔的應用程式就可以直接執行呢,因為在Vista下獨立應用程式執行預設雖沒有管理者權限,但是還是有基本的IO存取權限,而XBAP為了安全性根據預設是不被完全信任的,許多預設的資源都是不允許存取的,不過這不是本篇文章的主題,有興趣的讀者下次參考筆者的Vista的UAC與manifest一文。

要解決此問題也不難,在方案總管的專案點選滑鼠右鍵並點選”屬性”,接著切換到安全性頁籤,如下圖:


將原先預設的 “這是部分信任的應用程式” 改為 “這是完全信任的應用程式”,然後再執行一次就會發現我們的WpfBrowserApplication應用程式已經可以正常執行了,如下圖:

讀者也許會覺得奇怪,這樣的調整有什麼差異,其實IDE工具也是幫你調整了manifest檔案,而且XBAP應用程式應該是要用ClickOnce部署執行的,並透過Microsoft Build Engine (MSBuild)編譯,放到IIS虛擬目錄中。

OK,本文先介紹到此,將這個內容留給下一次的 ”manifest與Vista下的安全性設定”在與各位說明囉,下次見囉!


留言

張貼留言

這個網誌中的熱門文章

軟體工程師 - 成長的 10 個階段

常見的程式碼壞味道(Code Smell or Bad Smell)

什麼是 gRPC ?