C# 从Visual Studio工具箱隐藏WPF FrameworkElement时出现问题
我创建了一个WPF自定义控件库,其中包含一些从FrameworkElement派生的自定义类,我想从Visual Studio工具箱中隐藏其中一些类,但在VS2010和VS2013中遇到了不同的问题 下面是我的自定义控件库的类:C# 从Visual Studio工具箱隐藏WPF FrameworkElement时出现问题,c#,wpf,visual-studio-2010,visual-studio-2013,C#,Wpf,Visual Studio 2010,Visual Studio 2013,我创建了一个WPF自定义控件库,其中包含一些从FrameworkElement派生的自定义类,我想从Visual Studio工具箱中隐藏其中一些类,但在VS2010和VS2013中遇到了不同的问题 下面是我的自定义控件库的类: [DesignTimeVisible(false)] public class PersonObject : FrameworkElement { private string _Name = ""; private int _Age = 0;
[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; }
}
}
在VisualStudio2010中,问题在于属性DesignTimeVisible(false):当我将dll文件拖到工具箱中时,它也会显示PersonObject类
在Visual Studio 2013中,问题在于属性ToolboxBrowsable(false):当我将dll文件拖到工具箱中时,PersonObject和ExpandablePersonObject类不会显示(这是正常的)但是,如果我进入自定义控件的属性,并尝试按ExpandablePersonObject属性附近的New按钮,则会出现错误:“没有可添加到此集合的类型”
我做错了什么?如何使WPF自定义控件库与VS2010和VS2013兼容
编辑:
同时,我发现如果我从UIElement(而不是FrameworkElement)派生类,那么属性DesignTimeVisible(false)在VS2010中也可以正常工作,但我需要从FrameworkElement派生类以允许数据绑定
我发现他们说:
这篇文章介绍了VS2010的两个已知问题
- 仅限WPF。安装在GAC中的控制程序集中的公共类型 现在需要对从FrameworkElement或更高版本派生的 用System.ComponentModel.DesignTimeVisible修饰(false) 属性,以防止类型出现在工具箱或 选择项目对话框。不使用此属性装饰类型, 可能导致将类型添加到工具箱中,并将 在“选择项目”对话框中列出的类型中
- WPF和Silverlight。使用 TCI需要设计时程序集来限制添加到 工具箱和“选择项”对话框。没有设计时间 程序集中,从FrameworkElement或更高版本派生的所有类型都将 放置在工具箱中,并将在“选择项”对话框中列出
如果控制程序集安装到GAC中并使用TCI,则必须执行上述两个步骤,以将不需要的类型排除在工具箱之外并选择项 当程序集位于GAC中时,如何限制工具箱中的类型和选择项对话框: 在设计程序集中,将ToolboxBrowsableAttribute.No添加到公共控件程序集类型的元数据中以隐藏它 在控件程序集中,使用DesignTimeVisible(false)属性装饰公共类型以隐藏它
我尝试了这种方法,但通过这种方式,在VS2013中出现了错误“没有可添加到此集合的类型” 我通过在设计程序集中添加新的NewItemTypesAttribute(typeof(MyFrameworkElementDerivedClass))找到了解决方案 这样,VS2013显示了一个下拉列表,用户可以在其中选择项目