Pour vos propres propriétés attachées personnalisées, il y a deux options pour réaliser ce que vous cherchez:
1. Si le nombre de combinaisons de valeurs définissables sont pas complexes, vous pouvez rendre votre propriété attachée de type enum qui a l'ensemble FlagsAttribute. Vous pouvez les moissonneuses-batteuses les valeurs que vous souhaitez définir à l'aide bitwise ou |
:
[Flags]
public enum MultiDock
{
Left,
Top,
Right,
Bottom
}
et son utilisation dans le code:
MyCustomPanelOrWhatever.SetMultiDock(MultiDock.Left | MultiDock.Bottom);
Cela a une petite proplem cependant, vous ne pouvez pas faire ci-dessus en xaml directement, vous devrez écrire un MarkupExtension qui peut convertir la chaîne en valeurs énumérées. Son utilisation doit ressembler à ceci:
<CheckBox src:MyCustomPanelOrWhatever.MulitDock="{src:FlaggedEnum Left|Bottom}" />
2. Étant donné que les propriétés attachées peuvent être de tout type, ils peuvent bien sûr être aussi des types complexes (avec plusieurs sous-propriétés) ou même des collections, il est facilement possible de faire quelque chose comme ceci:
MyCustomPanelOrWhatever.SetMultiDock(new List<MultiDock> { MultiDock.Left, MultiDock.Bottom });
Si vous avez défini votre propriété jointe de cette façon, vous ne pas besoin de convertisseurs pour XAML, vous pouvez l'utiliser directement:
<CheckBox>
<src:MyCustomPanelOrWhatever.MultiDock>
<src:MultiDock.Left/>
<src:MultiDock.Bottom/>
</src:MyCustomPanelOrWhatever.MultiDock>
</CheckBox>
Donc, je ne comprends pas ce que l'utilisation de "AttachedProperty", que fait-il, cela pourrait aussi avoir été fait en utilisant une propriété sur CheckBox quand finalement il est stocké avec le CheckBox. Pourquoi DockPanel définit et possède la propriété et maintient un identifiant de propriété avec elle. – teenup