WPF用户控件在设计时无法找到程序集

时间:2010-09-24 15:20:31

标签: c# wpf user-controls controls

我在一个类库中有一系列WPF UserControl。控件有多个级别,最高级别将使用多个较低级别控件。一些低级控件从其他外部DLL导入类,然后在控件的属性中使用这些类。问题是,当我尝试将其中一个较低级别的控件放入更高级别的控件时,他们在设计器中尝试渲染时会出错,并声明它无法找到用于属性的类程序集。但是,如果将它们放到可执行文件的主窗口上并且实际上在运行时模式下完美运行,它们将正常工作,而不是在设计器中。不是世界末日......而是王室的痛苦。

作为一个简单的例子:

using MyClassLibrary;

public partial class MyControl : UserControl
{
    public MyControl {}

    public MyClass ClassInstance { get; set; }
}

上面的代码在设计器本身就可以正常呈现,只是当我尝试在另一个User控件中使用该控件时。

我也知道同样的问题可能来自构造函数,OnLoaded等中使用的外部类(由设计者运行的任何东西),但已经通过检查它是否处于设计模式并禁用该代码运行来修复它们。只是我无法弄清楚如何让它不处理控件属性。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,并通过让构造函数实际调用第二个调用库中代码的函数来解决它:

    public WorkspacePanel()
    {
        InitializeComponent();
        if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
        {
            runtimeConstructor();
        }
    }

    private void runtimeConstructor()
    {
        MyLibraryClass foo = new MyLibraryClass();
    }

不知何故,这种额外的间接程度欺骗了它。

但是当我开始尝试以XAML的形式引用我的库时,我遇到了另一个问题:设计师根本找不到它。事实证明,设计人员无法找到非托管库,除非它们位于您的系统路径上。因此,如果这是same problem,则将输出目录添加到PATH环境变量可能会修复它。

答案 1 :(得分:0)

您是否在Xaml中引用了该类? 例如:

xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"

答案 2 :(得分:0)

的xmlns:用户控件= “CLR-名称空间:Company.Project.OtherAssembly.UserControls;的组件 = Company.Project.OtherAssembly”

您是否添加了程序集属性?