2009-08-24 7 views
0

J'essaie actuellement de créer des classes pour une application WPF ressemblant à de la peinture. Je dois baser les classes LineMovement (ligne de StartPoint à EndPoint) et PathMovement (ligne passant par tous les points spécifiés dans une propriété Points de type PointCollection). Ces classes héritent de Control et obtiennent leur apparence via un ControlTemplate.WPF ControlTemplate avec foreach?

Maintenant, je veux ajouter (ce que j'appelle) PointMovers au ControlTemplate. Ceux-ci devraient être de petits éléments visuels résidant sur chacun des points dans l'une ou l'autre des classes du Mouvement. Ils devraient devenir une sorte de mécanisme de préhension pour faire glisser le point sous-jacent.

Le problème est bien sûr que je ne connais pas un moyen de créer un nombre variable d'éléments dans un ControlTemplate. Ce serait cool si je pouvais faire quelque chose comme ceci:

<Style x:Key="{x:Type mov:PathMovement}" TargetType="{x:Type mov:PathMovement}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type mov:PathMovement}"> 
       <Grid> 
        <Polyline Points="{TemplateBinding Points}" /> 
        <!-- interesting part start --> 
        <foreach loopvariable="Point" in="{TemplateBinding Points}"> 
         <PointMover Point="Point" /> 
        </foreach> 
        <!-- interesting part end --> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Est-ce possible? Avez-vous une autre approche en tête qui pourrait fonctionner?

Merci d'avance!

Répondre

1

Utilisez un ItemsControl en conjonction avec un ItemTemplate:

<ItemsControl ItemsSource="{Binding Points}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <!-- rendered for each point --> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

par les sons de votre cas d'utilisation, vous pouvez également lire sur AdornerLayer s.

+0

Ça a l'air bien. Je vais essayer ça. Cependant concernant votre conseil avec les AdornerLayers: J'ai lu il n'y a aucun moyen de les spécifier en XAML donc je ne l'utiliserai pas (pour ne pas mélanger XAML et code plus qu'absolument nécessaire). – chrischu

Questions connexes