2010-12-01 3 views

Répondre

0

Mettez votre StackPanel dans un élément de frontière et définir la frontière Rembourrage à « 10 0 »

+1

Pourquoi la bordure est-elle nécessaire lorsque StackPanel a une propriété Margin? Cela ne tient pas non plus compte de la marge entre chaque enfant, ce que le PO veut probablement faire. –

2

Je crains que ce n'est pas possible déclarative en XAML avec le StackPanel directement. C'est la philosophie conceptuelle dans Silverlight/WPF qu'un panel ne devrait pas modifier les propriétés de ses enfants. Ainsi, vous pouvez mettre en œuvre votre propre groupe qui fait de toute façon, ou vous pouvez utiliser une ItemsControl comme ça:

<ItemsControl> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ContentPresenter Margin="10,0" Content="{Binding Content}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 

    [...] 

</ItemsControl> 

Un ItemsControl utilise un StackPanel par défaut, vous pouvez utiliser sa propriété ItemsPanel pour définir un autre panneau comme ItemsPanelTemplate si vous le souhaitez.

+0

Vous pouvez également vous assurer que ItemsControl se comporte comme un StackPanel en spécifiant son 'ItemsPanel' à un StackPanel. Bien que ce soit probablement le défaut. Au moins, vous pouvez contrôler l'orientation. –

0

Vous pouvez également le faire par programme; votre StackPanel a une collection enfants. Vous pouvez l'utiliser pour parcourir et définir la marge.

1

La façon dont je le ferais est en définissant des styles implicites dans les ressources de StackPanel, pour chaque type de contrôle qui sera utilisé dans le StackPanel. Pour enregistrer la définition de la valeur à plusieurs reprises pour chaque type de contrôle, vous pouvez créer un style de base nommé qui cible FrameworkElement et définit le (s) style (s) à partir duquel le style de chaque type de contrôle peut hériter. Un exemple est ci-dessous:

<StackPanel Orientation="Horizontal"> 
    <StackPanel.Resources> 
     <Style x:Key="CommonStyle" TargetType="FrameworkElement"> 
      <Setter Property="Margin" Value="10,0" /> 
     </Style> 
     <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}" /> 
     <Style TargetType="TextBlock" BasedOn="{StaticResource CommonStyle}" /> 
     <Style TargetType="CheckBox" BasedOn="{StaticResource CommonStyle}" /> 
    </StackPanel.Resources> 

    <Button>Button</Button> 
    <TextBlock Text="Text" /> 
    <CheckBox>Check Box</CheckBox> 
</StackPanel> 

Notez comment chaque contrôle dans le StackPanel aura la marge appliquée, sans avoir besoin de définir sur chaque commande.

Hope this helps ...

Chris Anderson

PS. Auto-promotion flagrante - ceci est basé sur le tour de l'héritage dans mon livre Pro Business Applications with Silverlight 4 :).

Questions connexes