WPF ControlTemplate与foreach?

问题描述:

我目前尝试为类似WPF的油漆应用程序创建类。我必须将类LineMovement(从StartPoint到EndPoint的线)和PathMovement(线经过属性Points PointCollection中指定的所有点)。这些类从Control继承,并通过ControlTemplate获取它们的外观。WPF ControlTemplate与foreach?

现在我想添加(我所说的)PointMover到ControlTemplate。这些应该是运动类中每个点上的小视觉元素。它们应该成为一种抓住机制来拖动基本点。

问题当然是,我不知道在ControlTemplate中创建可变数量的元素的方法。这将是很酷,如果我能做这样的事情:

<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> 

这可能吗?你脑海中有另一种方法可行吗?

在此先感谢!

结合使用的ItemsControlItemTemplate

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

通过您的使用案例的声音,你可能还需要在AdornerLayer s的读取了。

+0

看起来不错。我会试试这个。 但是,关于您对AdornerLayers的建议:我读过没有办法在XAML中指定它们,所以我不会使用它(不要混合使用XAML和代码,而不是完全需要)。 – chrischu 2009-08-24 14:27:12