我創建了一個WPF自定義控件庫,其中一些自定義類派生自FrameworkElement,我想從Visual Studio Toolbox中隱藏一些這些類,但是在VS2010和VS2013中我得到了不同的問題。從Visual Studio工具箱隱藏WPF FrameworkElement的問題
這裏我的自定義控制庫類之下:
[DesignTimeVisible(false)]
public class PersonObject : FrameworkElement
{
private string _Name = "";
private int _Age = 0;
private Brush _ShirtColor = Brushes.Blue;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public int Age
{
get { return _Age; }
set { _Age = value; }
}
public Brush ShirtColor
{
get { return _ShirtColor; }
set { _ShirtColor = value; }
}
}
[ToolboxBrowsable(false), TypeConverter(typeof(ExpandableObjectConverter))]
public class ExpandablePersonObject : FrameworkElement
{
private string _Name = "";
private int _Age = 0;
private Brush _ShirtColor = Brushes.Blue;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public int Age
{
get { return _Age; }
set { _Age = value; }
}
public Brush ShirtColor
{
get { return _ShirtColor; }
set { _ShirtColor = value; }
}
}
在Visual Studio 2010中的問題與屬性DesignTimeVisible(假):當我拖動dll文件到工具箱它顯示了PersonObject類太。
在Visual Studio 2013中,問題出在ToolboxBrowsable(false)屬性上:當我將dll文件拖到工具箱中時,PersonObject和ExpandablePersonObject類沒有顯示(這是可以的),但是如果我進入屬性我的自定義控件,我嘗試按下靠近ExpandablePersonObject屬性的New按鈕,我得到錯誤:「沒有類型可供您添加到此集合中」。
我在做什麼錯?如何使我的WPF自定義控件庫兼容VS2010和VS2013?
編輯: 在此期間,我發現,如果我獲得自UIElement(而不是FrameworkElement的)我的課,然後在屬性DesignTimeVisible(假)正常工作也在VS2010,但我需要派生自FrameworkElement我的同班同學允許數據綁定。
我發現this article是說:
這篇文章涵蓋了VS2010兩個已知的問題。
- 僅WPF。 GAC 中安裝的衍生自FrameworkElement或更高版本的控制程序集中的公共類型現在需要爲 ,並使用System.ComponentModel.DesignTimeVisible(false) 屬性進行修飾,以保持該類型不出現在工具箱或 的Choose項目對話框。未使用此屬性裝飾該類型, 可能會導致類型被添加到工具箱中,並且將導致 的類型在選擇項目對話框中列出。
- WPF和Silverlight。使用TCI 安裝的控制組件需要使用設計時裝配來限制添加到工具箱和選擇項目對話框中的類型。如果沒有設計時間 程序集,則從FrameworkElement或更高版本派生的所有類型都將放置在工具箱中,並將在選擇項對話框中列出。
關鍵
如果控制組件安裝到GAC並使用TCI,你必須實現上面的步驟,以保持不必要的類型從工具箱中和選擇項。
如何限制在工具箱類型和選擇項對話框時,大會在GAC:
在設計組裝,添加ToolboxBrowsableAttribute.No到公共控制組件類型的隱藏它的元數據。
在控件組件中,使用DesignTimeVisible(false)屬性修飾公共類型以隱藏它。
我試過這種方法,但這種方式我得到錯誤「沒有類型可供您添加到這個集合」,在VS2013。