2010-11-11 40 views
0

J'ai remarqué que l'insertion de TextBlocks dans un autre TextBlock leur donne automatiquement un certain espacement. Je voudrais utiliser ce comportement pour un ItemsControl personnalisé. Je souhaite que le contenu de ItemsControl obtienne automatiquement une certaine quantité de pixels entre eux, mais uniquement entre et non après le dernier élément ou avant le premier.WPF: Imiter l'espacement automatique de TextBlock entre les contenus

(Edit)

<TextBlock> 
    <TextBlock Text="A" /> 
    <TextBlock Text="B" /> 
    <TextBlock Text="C" /> 
</TextBlock> 

givese: "ABC" et non "ABC"

<ItemsControl> 
    <Button Content="A" /> 
    <Button Content="B" /> 
    <Button Content="C" /> 
</ItemsControl> 

donne trois boutons emballés bien, mais je veux une marge autour du bouton B, à savoir l'espacement entre chaque bouton, ou tout ce qui est à l'intérieur de ce ItemsControl. Je ne veux pas avoir à définir manuellement les marges.

+0

Ce n'est pas tout à fait clair ce que vous recherchez. Que voulez-vous dire par ItemsControl personnalisé? Comment est-ce lié à TextBlocks? Allez-vous mettre TextBlocks à l'intérieur de ItemsControl? Ou juste n'importe quel objet? –

Répondre

1

J'ai trouvé moi-même une solution. L'astuce consiste à savoir si un élément dans le itemscontrol est la première ou la dernière et définir la marge dans le style en fonction de cela. Il existe une propriété attachée dans itemscontrol appelée AlternationIndex qui peut être utilisée pour cela. Si vous définissez AlternanceCount sur 9999, AlternationIndex est identique à l'index accu (jusqu'à 9999) et peut ensuite définir la marge sur le premier (AlternationIndex == 0) sur une autre valeur, puis sur la marge par défaut. Problème résolu.