C# 混合行为-默认集合值在混合中不可见

C# 混合行为-默认集合值在混合中不可见,c#,wpf,silverlight,expression-blend,C#,Wpf,Silverlight,Expression Blend,我创建了一个行为,该行为可以很好地处理非集合属性,但混合设计器无法“查看”集合的默认值。例: //WORKS!! (Enabled defaults to "true" (good)) private bool enabled = true; [Category("Physics"), Description("")] public bool Enabled { get { return enabled; } set { enabled = v

我创建了一个行为,该行为可以很好地处理非集合属性,但混合设计器无法“查看”集合的默认值。例:

//WORKS!! (Enabled defaults to "true" (good))
private bool enabled = true;
[Category("Physics"), Description("")]
public bool Enabled
{
     get { return enabled; }
     set
     {
           enabled = value;
     }
}

//DOESN'T WORK! The collection is always blank unless I manually add the items to the collection
private List<Category> collisionCategories = new List<Category>() { Category.All };
[Category("Physics"), Description("")]
public List<Category> CollisionCategories
{
    get { return collisionCategories; }
    set
    {
        collisionCategories = value;
    }
}
//有效!!(启用默认为“真”(良好))
私有布尔启用=真;
[类别(“物理”),说明(“”)
公共布尔启用
{
获取{return enabled;}
设置
{
启用=值;
}
}
//不行!除非我手动将项目添加到集合中,否则集合始终为空
私有列表冲突类别=新列表(){Category.All};
[类别(“物理”),说明(“”)
公共列表冲突类别
{
获取{return collisionCategories;}
设置
{
冲突类别=价值;
}
}

为什么“Category.All”不在我的列表中?

它是这样工作的:

private List<Category> collisionCategories =
       new List<Category>(new Category[] { Category.All });
私有列表冲突类别=
新列表(新类别[]{Category.All});

在Blend中,您的收藏属性右侧有一个小正方形。如果全部为黑色,则您的集合有其“默认”值,即您设置的值。如果要重写集合属性的默认值,则必须指定要添加到空白集合中的项。然后,小正方形将显示白色轮廓


这正是所有集合属性在Blend中工作的方式,VisualStudio designer可以实现这一点。但是请放心,如果用户没有为您的集合指定一个值,那么默认值将应用。

使用compact框架,因此非通用集合不是一个选项。