WPF一般預設提供一個MainWindow窗體,並在App.Xaml中使用StartupUri標記啟動該窗體.以下通過手寫實現WPF的啟動.
首先先介紹一下VS預設提供的App.Xaml的結構,如下圖:
主要包括App.Xaml檔案以及App.Xaml.cs,以及App.g.i.s檔案(在obj->Debug中可以看見該檔案)
1.雙擊App.Xaml可以看見Xaml標記語言的資訊,其中StartupUri="MainWindow.xaml"表示啟動的窗體.
2.雙擊App.Xaml.cs看到的是繼承於Application的一個App類,該類是空的.並且是部分類.
3.雙擊App下的InitializeComponent 或Main()時會跳轉到App.g.i.s檔案,同樣InitializeComponent 或Main()也是在App的部分類中(同樣可以看見partial關鍵字. public partial class App : Application).
4.以上均屬於同一個類,即App.
5.右鍵專案選擇屬性,在啟動物件中可以看見是未設定,如果點選下拉框會看見以上那個app類.
以上說明了VS提供的預設的模板,現在自己寫程式碼實現WPF啟動,為了說明WPF啟動,首先建立一個專案,把以上檔案都都刪.
1.自己建立一個類,隨便命名(app.cs),並且類名也叫app
2.新增繼承,讓app繼承於Application,vs會自動提示新增system名稱空間.
3.在app類中新增Main方法,該方法必須是公共,靜態,無返回值.public static void Main(){}
4.在該方法上新增[STAThread]特性
5.在Main方法中,首先例項化該類,即:App app = new WpfApp1.App();
6.定義一個窗體,假設命名為win,這個窗體可以是該專案中的,也可以是引用專案的.有些公司有UI庫,其中UI庫中提供了自定義的Window,這時候就可以例項化一個自定義的Window.
7.app.run(win);
8.還記得右鍵專案->屬性檢視啟動物件嗎? 正如你現在所想,啟動物件就可以選擇為剛才自定義好的app.
9.F5啟動,大功告成.
自己手寫Main函式的好處:
1.簡化了VS的模板,直接用程式碼啟動,更好理解WPF啟動流程.
2.如果使用自定義好的Window,則VS提供的模板沒有任何用,自己寫Main函式更清晰.
3.word等文件均可以實現雙擊開啟檔案,看起來挺帥.下面就自己實現這個帥動作.
3.1雙擊開啟檔案分為兩個步驟:
window檢測雙擊檔案的操作,並指向預設(設定好的程式)程式,然後把檔案路徑以命令列的形式傳給程式.
程式接收到該命令列,`獲取到檔案路徑,然後編寫程式碼解析檔案,並進行下一步操作.
3.2實現第一步,第一步主要是window系統的事,與程式無關.可參照一下連結.該註冊應該打包到軟體包中.安裝軟體時就會自動進行註冊.
https://blog.csdn.net/weixin_33834075/article/details/94325699 該註冊自行驗證.
後期也可以修改檔案與程式的關聯關係,參照以下連結:
https://jingyan.baidu.com/article/851fbc37d888553e1f15abb5.html
3.3第二步,程式部分的工作
app有一個事件Startup,在例項化app以後,給app新增Startup事件,app.Startup += App_Startup;;
private static void App_Startup(object sender, StartupEventArgs e)
{
}
該事件的StartupEventArgs 引數體用了傳入程式中的引數.e.Args是一個陣列,可以通過迴圈獲取.
3.4現在理論上可以實現了,但開發過程中怎麼測試呢? 為了測試進行註冊等也太麻煩了吧
其實VS已經為我們提供了命令列傳入的方式,右鍵專案->除錯 啟動選項中就可以看到命令列引數,在這裡寫上檔案路徑即可.如果想使用相對路徑,那就再定義一下工作目錄.