应用程序可以正常运行,但我在设计器视图中看不到我的设计。
它显示“无法找到名为'Locator'的资源”。显然,我没有改变代码,我只是使用数据绑定对话框进行了数据绑定...
有人遇到同样的问题吗?
应用程序可以正常运行,但我在设计器视图中看不到我的设计。
它显示“无法找到名为'Locator'的资源”。显然,我没有改变代码,我只是使用数据绑定对话框进行了数据绑定...
有人遇到同样的问题吗?
有两种情况会出现这种错误。
如果在构建应用程序之前切换到Blend,则DLL尚不可用,会出现此错误。构建应用程序可以解决此问题。
Expression Blend中存在一个错误,如果您将用户控件放置在另一个用户控件(或WPF中的窗口)中,并且内部用户控件使用全局资源,则无法找到全局资源。在这种情况下,您也会收到错误信息。
不幸的是,对于第二点,我没有解决方法,因为这是Blend的错误。我希望我们很快能看到解决方案,但似乎在Blend 4中仍然存在。
您可以采取以下措施:
在处理外部用户控件时,请忽略此错误。当您处理内部用户控件时,您应该可以正常看到设计时数据(我知道这不是很令人满意)。
使用d:DataContext在Blend中暂时设置设计时数据上下文。
希望这可以帮助你,
Laurent
我想到了一个相对可接受的解决方案,因为这个问题似乎在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);
}
rd.Source = new Uri(@"R:\TFS-PROJECTS\ProjectWPF\Resources\Styles.xaml", UriKind.Absolute);
如果你像我一样,已经束手无策了,那么我相信只需要5分钟的工作就能找到正确的路径!但是请尝试以下方法:
DataContext="{Binding Main, Source={StaticResource Locator}
使用:
d:DataContext="{Binding Main, Source={StaticResource Locator}
其中“d”已经被先前定义为:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
我曾遇到一个与用户控件资源类似的问题。
我在我的用户控件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 资源文件名。
希望这可以帮到你。
只需在您的App.xaml.cs文件的开头添加以下代码:
这是我的代码片段:
[STATThread()]
static void main(){
App.Current.Resources.Add("Locator", new yournamespace.ViewModel.ViewModelLocator());
}
public App(){
main();
}
确保 Blend 已经打开了整个解决方案,而不仅仅是包含视图的单个项目。我曾在 Visual Studio 中右键单击并选择“在 Expression Blend 中打开”。令我惊讶的是,Blend 找不到解决方案文件,因此只打开了单个项目。
当我意识到这一点时,我直接启动了 Blend,指向了解决方案文件,然后 Blend 能够在我的视图中找到 ViewModelLocator。