Ibr*_*taz 5 wpf user-controls expression-blend-4 c#-4.0
短版本 如何处理嵌入到其他窗口/用户/自定义控件中的UserControl中的静态资源查找?因此,Blend 4可以正确地呈现它@设计时Visual Studio已经为您做的事情.
长版本 正如问题所示,我们有一个窗口,其中包含一些嵌入式用户控件,窗口以及每个嵌入式用户控件都使用静态资源标记扩展来解析对app.xaml文件中合并字典中找到的资源的引用.
当单独打开时,Blend在加载和渲染我在VS Designer Surface中创建的任何示例用户控件时都没有问题.解决我无处不在的无数静态资源标记扩展没有问题.
每当我尝试打开我的'MainWindow.xml'时,(一个窗口控件)我注意到我得到4 - 无法使用Blend 4 创建类型错误实例,很好地告诉我ArtBoard它已经捕获了一些设计时异常.通过将VS调试器实例附加到Blend进一步深入研究这些异常我注意到我引用的每一个静态资源,它抱怨它无法找到它.
作为比较,我查看了我创建的自定义控件,它根本不使用任何静态资源,而是使用本地资源.嵌入到我注意到的UserControl中的这个自定义控件非常好用.我觉得很明显为什么!
在SO上有任何人,有任何想法如何解决这个问题?我尝试了整个'添加设计时字典'< - 部分工作,嵌入式用户控件仍然根本没有创建!
研究
更新:可能的解决方案:
这些解决方案都不是很漂亮.=(
我的文件中有多个资源Converters.xaml,Blend 曾经抱怨过。我的解决方法是在设计时强制加载该 xaml 文件。
using System;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Windows.Markup;
public static class DesignTimeSupport
{
public static void LoadCommonConvertersForBlend(this ResourceDictionary resourceDictionary)
{
if (resourceDictionary == null || !DesignerProperties.IsInDesignTool) return;
var convertersXamlUri = new Uri("Assets/Converters.xaml", UriKind.Relative);
var streamInfo = Application.GetResourceStream(convertersXamlUri);
using (var reader = new StreamReader(streamInfo.Stream))
{
var converters = (ResourceDictionary)XamlReader.Load(reader.ReadToEnd());
resourceDictionary.MergedDictionaries.Add(converters);
}
}
}
Run Code Online (Sandbox Code Playgroud)
ViewBase在构造函数中调用此方法。
public class ViewBase : Page
{
public ViewBase()
{
Resources.LoadCommonConvertersForBlend();
}
}
Run Code Online (Sandbox Code Playgroud)
不继承自的类会ViewBase进行自己的调用。
| 归档时间: |
|
| 查看次数: |
4943 次 |
| 最近记录: |