2010-09-23 64 views
3

是否有一些技巧已知告訴混合停止嘗試在我的app.xaml中設置一個startupURI?我Google搜索,但沒有看到任何東西,所以我想我會問在這裏。防止混合添加一個startupURI到應用程序?

我使用一個啓動程序並自己實例化mainwindow。當我讓它編譯時,每一次和一段時間混合喜歡在startupURI =「MainWindow.xaml」中折騰。偶爾我會看到一些信息:「這個項目沒有任何啓動場景,你想混合等等等等等等嗎?」或類似的規定。我點擊取消/否,但它仍然在我的代碼中拋出一個gremlin。內部混合有一些檢查此屬性的機制,或者它不會通過對話框向我投訴。那麼,我該如何告訴它「不,謝謝混合,我沒有這個好?」,哈哈。

它很煩人。我打開混合來做一些簡單的事情,比如使用顏色選擇器並使用它來編譯,因爲VS2010沒有打開。我的結果是兩個主要窗口。但它不會每次都這樣做,所以它不是一個可重複的行爲。編譯器只是隨機動作。

編輯:我使用混合4但我看到這種情況發生時,我也使用混合3。

+0

我第二是,它顯然是惱人的,當你需要從statup代碼實例化你的窗口! – 2010-10-15 20:31:46

+0

我希望Blend團隊的成員經常參加這個論壇,並且可以在下一個Blend版本中包含此修復或至少一個複選框選項。這種情況至少每週至少發生三次。我儘量不要用混合來構建我的項目,但我必須多次這樣做才能讓我的視覺效果在美工板上刷新。在構建它時,需要使用活動的.xaml文件(窗口,頁面,用戶控件)並將其設置爲啓動。 – TWood 2010-11-10 15:41:52

回答

0

這是一個可怕的,可怕的黑客,但嘿,它的作品。默認情況下,StartupUri爲null,但無法使用該屬性將其設置爲null,因此如果您想生活在邊緣,則可以繞過該屬性。

// Dangit blend! Stop inserting a stupid StartupUri  
private void FixStartupUri() 
{ 
    var type = typeof(Application); 
    var startupUri = type.GetField("_startupUri", BindingFlags.Public 
     | BindingFlags.NonPublic 
     | BindingFlags.Instance); 
    startupUri.SetValue(this, null); 
} 

添加到您的應用程序類,並調用它像這樣:

protected override void OnStartup(StartupEventArgs e) 
{ 
    FixStartupUri(); 
    base.OnStartup(e); 
    // Do the rest of your startup stuff. 
} 
相關問題