为了达到你所寻找的自己定制的附加属性有两种选择:
如果设定值的组合的数量并不复杂,你可以做类型的附加属性列举了FlagsAttribute。您可以在结合了值,您要使用设置按位或|
:
[Flags]
public enum MultiDock
{
Left,
Top,
Right,
Bottom
}
及其代码的用法:
MyCustomPanelOrWhatever.SetMultiDock(MultiDock.Left | MultiDock.Bottom);
这有一个小proplem但是,你不能在上面做xaml直接,你将不得不写一个MarkupExtension可以将字符串转换为标记的枚举值。然后它的使用是这样的:
<CheckBox src:MyCustomPanelOrWhatever.MulitDock="{src:FlaggedEnum Left|Bottom}" />
2.由于附加属性可以是任何类型的,他们可以当然也可以是复杂的类型(具有多个子属性)或甚至集合,因此可以容易地做这样的事情:
MyCustomPanelOrWhatever.SetMultiDock(new List<MultiDock> { MultiDock.Left, MultiDock.Bottom });
如果您已经定义了附加属性这样,你不需要对任何XAML转换器,你可以直接使用它:
<CheckBox>
<src:MyCustomPanelOrWhatever.MultiDock>
<src:MultiDock.Left/>
<src:MultiDock.Bottom/>
</src:MyCustomPanelOrWhatever.MultiDock>
</CheckBox>
所以,我不明白什么是“AttachedProperty”的用法,它是做什么的,当CheckBox最终与CheckBox一起存储时,也可以使用CheckBox上的某些属性来完成。为什么DockPanel正在定义和拥有该属性并使用它来维护属性标识符。 – teenup 2010-11-08 07:15:09