2009-03-29 8 views
2

Je construis un ItemsControl personnalisé dans Silverlight qui (entre autres choses) permet aux éléments d'être affichés horizontalement ou verticalement au moment de l'exécution. Comment puis-je lier la propriété Orientation du ItemsPanel à la propriété Orientation de mon contrôle parent? J'ai essayé d'utiliser TemplateBinding (qui fonctionne dans ControlTemplate) mais ne semble pas fonctionner dans ItemsPanelTemplate, est-ce que je fais quelque chose de mal?TemplateBinding dans ItemsPanelTemplate

<Style TargetType="CustomItemsControl"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="{TemplateBinding Orientation}" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Répondre

7

Utilisez un RelativeSource:

<Style TargetType="CustomItemsControl"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="{Binding Orientation, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CustomItemsControl}}}" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Modifier après commentaire: Silverlight ne supporte pas RelativeSource, mais this post par Colin Eberhardt explique comment il peut être mis en œuvre manuellement.

+0

Salut Kent, merci pour votre réponse, malheureusement j'utilise Silverlight qui ne semble pas supporter l'utilisation de RelativeSource. Toutes mes excuses pour la confusion, j'ai mis à jour ma question initiale pour clarifier que j'utilise Silverlight. –

+0

Hmm, je vois. Dans ce cas, vous voudrez peut-être consulter ce post: http://www.scottlogic.co.uk/blog/wpf/2009/02/relativesource-binding-in-silverlight/ –

+0

+1: J'utilise WPF et avait le même problème; Votre réponse a été vraiment utile. – Heinzi

Questions connexes