[英]Issue hiding WPF FrameworkElement from the Visual Studio Toolbox
我使用从FrameworkElement派生的一些自定义类创建了WPF自定义控件库,我想从Visual Studio Toolbox中隐藏其中的某些类,但是在VS2010和VS2013中遇到了不同的问题。
在我的自定义控件库的类下面:
[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(false):当我将dll文件拖到工具箱中时,它也显示了PersonObject类。
在Visual Studio 2013中,问题出在属性ToolboxBrowsable(false):当我将dll文件拖到工具箱中时,不显示PersonObject和ExpandablePersonObject类(这是可以的),但是如果我进入自定义控件的属性并我尝试在ExpandablePersonObject属性附近按“新建”按钮,但出现错误:“没有类型可用于添加到此集合”。
我究竟做错了什么? 如何使WPF自定义控件库与VS2010和VS2013兼容?
编辑 :同时,我发现如果我从UIElement(而不是FrameworkElement)派生我的类,那么属性DesignTimeVisible(false)在VS2010中也可以正常工作,但是我需要从FrameworkElement派生我的类以允许数据绑定。
我发现这篇文章说:
这篇文章涵盖了VS2010的两个已知问题。
危急
如果控制程序集已安装到GAC中并使用TCI,则必须执行上述两个步骤,以将不需要的类型排除在“工具箱”和“选择项”之外。
程序集在GAC中时,如何在“工具箱”和“选择项”对话框中限制类型:
在设计程序集中,将ToolboxBrowsableAttribute.No添加到公共控件程序集类型的元数据中以将其隐藏。
在控件程序集中,使用DesignTimeVisible(false)属性装饰公共类型以将其隐藏。
我尝试了这种方法,但是这样我在VS2013中收到错误“没有类型可用于添加到此集合”。
我通过在设计程序集中添加新的NewItemTypesAttribute(typeof(MyFrameworkElementDerivedClass))找到了解决方案。
这样,VS2013会显示一个下拉菜单,用户可以在其中选择项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.