2010-09-24 121 views
1

我在一個類庫中有一系列WPF用戶控件。控件有多個級別,最高級別將使用多個較低級別的控件。一些低級控件從其他外部DLL導入類,然後在控件的屬性中使用這些類。問題是,當我嘗試將其中一個較低級別的控件放到更高級別的控件中時,它們在設計器中嘗試渲染時出錯,指出它無法找到用於屬性的類組件。但是,如果將它們放到可執行文件的主窗口上,它們將會正常工作,並且在運行時模式下可以完美運行,而不是在設計器中運行。不是世界的盡頭......而是皇室的痛苦。WPF用戶控件在設計時無法找到程序集

作爲一個簡單的例子:

using MyClassLibrary; 

public partial class MyControl : UserControl 
{ 
    public MyControl {} 

    public MyClass ClassInstance { get; set; } 
} 

上面的代碼會呈現在設計師本身很好,只是沒有當我嘗試使用其他用戶控制的內對照。

我也知道同樣的問題可以從構造函數,OnLoaded等(任何由設計人員運行)中使用的外部類產生,但已經通過檢查它是否處於設計模式並禁止該代碼運行來解決這些問題。這只是我無法弄清楚如何讓它不處理控制屬性。

任何想法?

+0

我有一個測試項目,其中WPF設計器無法識別使用外部(非託管)DLL的程序集,但如果我在代碼中引用程序集,則應用程序在運行時工作正常。我會問我的(類似)問題,並讓我知道如果我得到一個可能對你有用的答案。 – 2011-05-17 20:10:15

回答

0

您是否參考過Xaml中的類? 例子:

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

否...不在任何一個控件中。我會做哪一個,以及如何將它引用到已經在程序集引用中的東西? (例如MyControl.dll ...它不是微軟的東西) – 2010-09-24 15:55:57

1

我遇到了類似的問題,並且通過具有構造函數實際上調用到調用的庫中的代碼的第二功能圍繞它的工作:

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

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

不知怎的,這個額外的水平間接欺騙了它。

但是當我開始嘗試以XAML的形式引用我的庫時,我遇到了一個額外的問題:設計者找不到它。事實證明,設計人員無法找到非託管庫,除非他們在您的系統路徑中。因此,如果這是same problem,則將輸出目錄添加到PATH環境變量中可能會解決此問題。

0

的xmlns:用戶控件= 「CLR的命名空間:Company.Project.OtherAssembly.UserControls; 裝配 = Company.Project.OtherAssembly」

你添加組件屬性?

相關問題