2009-08-24 101 views
0

我目前嘗試爲類似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> 

這可能嗎?你腦海中有另一種方法可行嗎?

在此先感謝!

回答

1

結合使用的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