該應用程序運行正常,但我無法在設計器視圖中看到我的設計。MVVM Light + Blend設計器查看錯誤:找不到名爲'Locator'的資源。
它說無法找到名爲「定位」的資源。很顯然,我沒有在代碼改變什麼,我只是做了數據使用數據綁定對話框綁定...
任何人面臨同樣的問題?
該應用程序運行正常,但我無法在設計器視圖中看到我的設計。MVVM Light + Blend設計器查看錯誤:找不到名爲'Locator'的資源。
它說無法找到名爲「定位」的資源。很顯然,我沒有在代碼改變什麼,我只是做了數據使用數據綁定對話框綁定...
任何人面臨同樣的問題?
有兩個已知的出現在那裏會發生這種情況。
如果在構建應用程序之前更改爲Blend,則DLL尚不可用,並且可以看到此錯誤。構建應用程序解決了這個問題。
Expression Blend中存在一個錯誤,如果您要將用戶控件放在另一個用戶控件(或WPF中的Window)中,並且內部用戶控件使用全局資源,則無法找到全局資源。在這種情況下,你也會得到錯誤。
不幸的是,我沒有第二點的解決方法,因爲它是一個Blend錯誤。我希望我們很快就會看到該決議,但它似乎仍然存在在Blend 4
你可以做的是
在外部用戶控制工作時,忽略錯誤。當你在內部用戶控件上工作時,你應該看到設計時間數據很好(我知道不太令人滿意)。
使用d:DataContext的臨時設置在Blend設計時數據上下文。
希望這有助於,
洛朗
,我想出了一個合理可接受的解決此問題的,因爲它似乎並沒有被固定在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分鐘的工作在正確的道路,但是試試這個,如果你在你的智慧結束!我是!
確保Blend已打開整個解決方案,而不僅僅是包含視圖的單個項目。我在Visual Studio中右鍵單擊並選擇「在表達式混合中打開」。對我來說,Blend找不到解決方案文件,所以它只打開單個項目。
當我意識到這一點時,我直接啓動了Blend,將其指向解決方案文件,然後Blend能夠在我的視圖中找到ViewModelLocator。
的原因及解決辦法說明如下 http://blogs.msdn.com/b/unnir/archive/2009/03/31/blend-wpf-and-resource-references.aspx
看(二)崗位的一部分。
我有一個用戶控制資源類似的問題。
我在我的用戶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資源文件名的命名空間。
希望這會有所幫助。
代替在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"
什麼是這種方法的優點,我是一個新手,混合,所以我圍繞着他人提出的一些解決方案而絞盡腦汁。 – IbrarMumtaz 2012-06-08 08:16:52
就在添加此您App.xaml.cs開頭
這是我的代碼段
[STATThread()]
static void main(){
App.Current.Resources.Add("Locator", new yournamespace.ViewModel.ViewModelLocator());
}
public App(){
main();
}
很驚訝這個問題根本沒有任何收藏或上傳! – 2010-08-26 01:17:16
作爲一個誰主要在混合工作,這使我想刺人...... – BentOnCoding 2011-03-10 23:13:10
我在Visual Studio 2011中有這個問題,我通過改變有問題的{StaticResource Foo}到{DynamicResource Foo}來解決它。希望這可以幫助某人。 – Tower 2012-03-11 20:00:00