2010-04-19 29 views
16

該應用程序運行正常,但我無法在設計器視圖中看到我的設計。MVVM Light + Blend設計器查看錯誤:找不到名爲'Locator'的資源。

它說無法找到名爲「定位」的資源。很顯然,我沒有在代碼改變什麼,我只是做了數據使用數據綁定對話框綁定...

任何人面臨同樣的問題?

+0

很驚訝這個問題根本沒有任何收藏或上傳! – 2010-08-26 01:17:16

+1

作爲一個誰主要在混合工作,這使我想刺人...... – BentOnCoding 2011-03-10 23:13:10

+1

我在Visual Studio 2011中有這個問題,我通過改變有問題的{StaticResource Foo}到{DynamicResource Foo}來解決它。希望這可以幫助某人。 – Tower 2012-03-11 20:00:00

回答

8

有兩個已知的出現在那裏會發生這種情況。

  • 如果在構建應用程序之前更改爲Blend,則DLL尚不可用,並且可以看到此錯誤。構建應用程序解決了這個問題。

  • Expression Blend中存在一個錯誤,如果您要將用戶控件放在另一個用戶控件(或WPF中的Window)中,並且內部用戶控件使用全局資源,則無法找到全局資源。在這種情況下,你也會得到錯誤。

不幸的是,我沒有第二點的解決方法,因爲它是一個Blend錯誤。我希望我們很快就會看到該決議,但它似乎仍然存在在Blend 4

你可以做的是

  • 在外部用戶控制工作時,忽略錯誤。當你在內部用戶控件上工作時,你應該看到設計時間數據很好(我知道不太令人滿意)。

  • 使用d:DataContext的臨時設置在Blend設計時數據上下文。

希望這有助於,

洛朗

+0

您如何看待我的解決方案?我不喜歡它,但它有點作品 – 2010-08-26 02:46:51

+0

這是一個有趣的方法。我知道你不喜歡它的意思。 OTOH,如果代碼是完全隔離的(設計時間代碼),並且它確實讓您的工具更輕鬆......呃,爲什麼不呢。無論如何謝謝。 – LBugnion 2010-08-28 14:50:28

+0

我遇到後一個問題,並且這裏沒有任何修復似乎有幫助! 微軟如何才能在VS2010中工作而不是在Blend 4中工作? – jimplode 2011-08-09 12:09:58

7

,我想出了一個合理可接受的解決此問題的,因爲它似乎並沒有被固定在Blend 4:

在您的XAML UserControl的構造函數中,只需添加它所需的資源,前提是您在Blend中處於設計模式。這可能只是定位器,或者也適用於樣式和轉換器。

public partial class OrdersControl : UserControl 
{ 
    public OrdersControl() 
    { 
     // MUST do this BEFORE InitializeComponent() 
     if (DesignerProperties.GetIsInDesignMode(this)) 
     { 
      if (AppDomain.CurrentDomain.BaseDirectory.Contains("Blend 4")) 
      { 
       // load styles resources 
       ResourceDictionary rd = new ResourceDictionary(); 
       rd.Source = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "Resources/Styles.xaml"), UriKind.Absolute); 
       Resources.MergedDictionaries.Add(rd); 

       // load any other resources this control needs such as Converters 
       Resources.Add("booleanNOTConverter", new BooleanNOTConverter()); 
      } 
     } 

     // initialize component 
     this.InitializeComponent(); 

} 

可能有一些邊緣情況,但在我遇到一個很大的紅色錯誤符號之前的簡單情況下,它可以正常工作。我很樂意看到如何更好地解決這個問題的建議,但這至少可以讓我爲用戶控件添加動畫,否則這些控件會顯示爲錯誤。


你也可以提取出資源的創建App.xaml.cs

internal static void CreateStaticResourcesForDesigner(Control element) 
    { 
     if (AppDomain.CurrentDomain.BaseDirectory.Contains("Blend 4")) 
     { 
      // load styles resources 
      ResourceDictionary rd = new ResourceDictionary(); 
      rd.Source = new Uri(System.IO.Path.Combine(Environment.CurrentDirectory, "Resources/Styles.xaml"), UriKind.Absolute); 
      element.Resources.MergedDictionaries.Add(rd); 

      // load any other resources this control needs 
      element.Resources.Add("booleanNOTConverter", new BooleanNOTConverter()); 
     } 
    } 

,然後在控制在此之前的InitializeComponent():

 // create local resources 
    if (DesignerProperties.GetIsInDesignMode(this)) 
    { 
     App.CreateStaticResourcesForDesigner(this); 
    } 

注意:在某些時候,這停止了爲我工作,我最終硬編碼Styles.xaml beca的路徑使用我很沮喪試圖找出我是在哪個目錄。

rd.Source = new Uri(@"R:\TFS-PROJECTS\ProjectWPF\Resources\Styles.xaml", UriKind.Absolute); 

我相信我能找到用5分鐘的工作在正確的道路,但是試試這個,如果你在你的智慧結束!我是!

+1

我不能得到這個工作:( – jimplode 2011-08-09 12:10:46

+0

@jimplode見附註我只是說 – 2011-08-12 21:26:56

+0

非常感謝你!解決方案的工作非常適合我。 – Dmitry 2012-08-20 20:14:41

0

確保Blend已打開整個解決方案,而不僅僅是包含視圖的單個項目。我在Visual Studio中右鍵單擊並選擇「在表達式混合中打開」。對我來說,Blend找不到解決方案文件,所以它只打開單個項目。

當我意識到這一點時,我直接啓動了Blend,將其指向解決方案文件,然後Blend能夠在我的視圖中找到ViewModelLocator。

1

我有一個用戶控制資源類似的問題。
我在我的用戶XAML代碼添加了這個:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/GinaControls;component/Resources/GinaControlsColors.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

哪裏GinaControls是控制類被聲明和/Resources/GinaControlsColors.xaml是項目文件夾和XAML資源文件名的命名空間。

希望這會有所幫助。

代替
4

在MyUserControl.xaml,:

DataContext="{Binding Main, Source={StaticResource Locator} 

使用:

d:DataContext="{Binding Main, Source={StaticResource Locator} 

,其中 「d」 先前已被定義爲:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+0

什麼是這種方法的優點,我是一個新手,混合,所以我圍繞着他人提出的一些解決方案而絞盡腦汁。 – IbrarMumtaz 2012-06-08 08:16:52

1

就在添加此您App.xaml.cs開頭

這是我的代碼段

[STATThread()] 
static void main(){ 
     App.Current.Resources.Add("Locator", new yournamespace.ViewModel.ViewModelLocator()); 
} 

public App(){ 
     main(); 
} 
相關問題