Avez-vous défini des tailles explicites sur vos toiles? Les canevas ne sont pas dimensionnés pour s'adapter à leur contenu, donc à moins que vous ne spécifiez explicitement la taille de la toile, lorsque vous les placez tous dans un panneau de pile, leur contenu apparaîtra les uns sur les autres, comme vous l'expliquez. Cela est dû au fait que la position (0,0) à laquelle les enfants sont positionnés par rapport à la toile sera la partie supérieure gauche du panneau de pile (le même point pour toutes les toiles et tous leurs enfants).
Essayez ce qui suit à Kaxaml pour mettre en évidence la situation:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<StackPanel>
<Canvas>
<TextBlock Text="Child of canvas one" />
</Canvas>
<Canvas>
<TextBlock Text="Child of canvas two" />
</Canvas>
</StackPanel>
</Page>
Vous verrez les deux lignes de texte sont superposées l'une sur l'autre.
Maintenant, essayez ceci:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<StackPanel>
<Canvas Height="15">
<TextBlock Text="Child of canvas one" />
</Canvas>
<Canvas Height="15">
<TextBlock Text="Child of canvas two" />
</Canvas>
</StackPanel>
</Page>
Et vous verrez l'espacement que vous désirez.
Espérons que cela aide.
Ajoutez-vous Canvasses ou UserControls? Avez-vous (double) vérifié que les informations Position/Taille ne sont pas définies? Peut-être que vous devriez faire un petit code. –