Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Visual Studio工具箱隐藏WPF FrameworkElement时出现问题_C#_Wpf_Visual Studio 2010_Visual Studio 2013 - Fatal编程技术网

C# 从Visual Studio工具箱隐藏WPF FrameworkElement时出现问题

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;

我创建了一个WPF自定义控件库,其中包含一些从FrameworkElement派生的自定义类,我想从Visual Studio工具箱中隐藏其中一些类,但在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; }
    }
}
在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显示了一个下拉列表,用户可以在其中选择项目