2013-03-05 139 views
6

我最近升級到VS 2012,我不得不根據需要開始使用.net 4.5,但除此之外。我的問題是這樣的:資源「x」無法解析。

我有一個ResourceDictionary我叫AppStyles.xaml主體工程,並在App.Xaml我有以下幾點:

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="AppStyles.xaml"/> 
    <ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

在我ResourceDictionary有一種風格,然後我可以申請這種風格,通過設置Style={StaticResource MyButton}我的任何項目中的任何按鈕。

升級到VS 2012後,我發現我在標題中出現了很多錯誤,有時它會阻止我進行調試,有時它不會!

有沒有不同的方式,我應該這樣做,或者在VS 2012有問題嗎?

+0

你的意思是你在設計時對一些問題沒有被發現?但是你可以編譯並運行正常,對吧? – 2013-03-05 13:26:06

+0

我在設計時遇到錯誤,說找不到資源。但有時我可以運行,甚至可以正確顯示按鈕!但有時候會阻止它進行調試。 – 2013-03-05 13:35:34

+0

你有代碼隱藏AppStyles.xaml嗎? (我做了,並停止了VS在設計時加載它)另一個問題可能包括AppStyles.xaml作爲資源,它在編譯時工作,但不是在設計時。它應該是一個'頁面'。 – Wouter 2014-04-28 21:08:44

回答

5

我在VS2010中也有這個問題。有時如果我制定「清潔解決方案」和「重建解決方案」,問題就會解決。如果這不起作用,我通常會重新啓動VS2010。

我也將Style x:Key改名爲別的,問題沒有了。但我不覺得這個解決方案是完美的......

<Application.Resources> 
<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 

    <!-- Load Infrastructure's Resource Dictionaries --> 
    <ResourceDictionary Source="/MyProject.Modules.Infrastructure;component/ResourceDictionaries/ResourceLibrary.xaml" /> 

    </ResourceDictionary.MergedDictionaries> 

    <!-- Workaround for ResourceDictionary loading bug/optimization --> 
    <Style TargetType="{x:Type Rectangle}" /> 

</ResourceDictionary> 

參考這個問題對我的代碼示例中的解決方法:Trouble referencing a Resource Dictionary that contains a Merged Dictionary

+0

我已清理,重建,重新啓動,甚至重新啓動我的電腦!這個錯誤一直在彈出,它沒有任何意義,它完美地運行了一秒,接下來它不能再編譯了! – 2013-03-06 07:24:28

+0

嗯。這太奇怪了。你有沒有嘗試重新命名你的風格鍵? – hijack 2013-03-06 08:32:43

+0

是的,問題依然存在!它不會阻止我再編譯,但是沒有一個使用這種風格的自定義控件可以在設計中顯示出來! – 2013-03-06 08:45:44

4

您可以創建一個公共或基礎設施項目從其他項目將參考。添加您的資源。然後創建一個包URI。 然後在用戶控件或窗口資源的資源字典

<...Resources> 
<ResourceDictionary> 
    <!-- Resource Dictionaries --> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary 
      Source="pack://application:,,,/Common;component/Dictionaries/Styles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

在窗口的情況下,用戶控件或使用Window.Resources中引用。這對我有用。

10

WPF無法解析您嘗試合併的資源字典。在創建合併字典時,WPF會遵循一組規則來嘗試解析URI。在你的情況下,URI是不明確的,所以WPF無法可靠地解決它。

App.xaml中的Source URI更改爲絕對包URI。例如,如果你的項目被稱爲MyProject(即:「MyProject的」是短集名稱),那麼你應該在App.xaml改變Source

這是假設AppStyles.xaml是在MyProject根。您可以選擇指定簽名程序集的權限,程序集版本和公鑰信息。但是,使用簡短的程序集名稱(在上例中爲MyProject)應該是安全的。

在WPF上的Pack URI的詳細信息,請參閱MSDN上的這個頁面:http://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

1

您可以添加資源字典到你的項目,然後改變它的生成操作資源,然後嘗試添加其URI的代碼如下:

<ResourceDictionary> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary 
     Source="/Styles.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

或乾脆讓vs2012過程中它通過使用屬性選項卡...

+0

將字典構建操作切換爲* Resource *不會改變任何內容 – superjos 2015-03-08 23:06:35

3

,可以使用相對路徑到您appStyles.xaml文件夾。希望這可以幫助。

類似下面

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Resources/Styles.xaml"></ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
<ResourceDictionary>