0

我有以下问题。我有位于不同程序集中的 ResourceDictionaries。如果我创建 UserControls 并使用此 ResourceDictionaries 中的 Styles 和 Resourcen 在运行时都可以正常工作,但在设计时我在 vs2010 中遇到错误,例如 - 无法找到名称为“InvertConverter”的资源。

  • 核心资源.dll
  • 其他资源.dll
  • UserControl.dll(参考以上两者)
  • OtherWpf.dll(参考以上所有内容并使用用户控件)

现在我检查了很多与这个问题相关的帖子和​​博客。一种解决方案是将 ResourceDictionaries 添加到每个 UserControl - 这会起作用,但会在运行时产生大量开销。我发现的所有其他解决方案都不适合我。

我会将我所做的事情作为答案发布,因为它对我有用。但我想看看其他/更好的解决方案。

4

1 回答 1

0

这就是我现在所做的。

我只是在设计时使用静态方法添加我的资源字典

public class DesignTimeResourceLoader
{
    public static void LoadResources4DesignTime(UserControl ctrl)
    {
        //do this just in DesignMode
        if (Convert.ToBoolean(DesignerProperties.IsInDesignModeProperty.GetMetadata(ctrl).DefaultValue))
        {
            var uricore = new Uri("/CoreResource;component/ResourceDictionary.xaml", UriKind.Relative);
            var core = (ResourceDictionary)Application.LoadComponent(uricore);
            ctrl.Resources.MergedDictionaries.Add(core);

            var uriother = new Uri("/OtherResource;component/OtherResourceDictionary.xaml", UriKind.Relative);
            var other = (ResourceDictionary)Application.LoadComponent(uriother);
            ctrl.Resources.MergedDictionaries.Add(other);

            //if you have(need more just add here
        }
    }
}

我在我的 UserControl.dll 中创建并使用这个类,并且对于每个 Usercontrol 我在构造函数中调用该方法。

public partial class MyControl : UserControl
{
    public MyControl ()
    {
        DesignTimeResourceLoader.LoadResources4DesignTime(this);
        InitializeComponent();
    }
}

这对我有用。bu也许有一些我现在没有看到的缺点。

于 2012-07-26T12:03:55.707 回答