2009-05-04 9 views
3

In WPF können Sie eine ListBox mit einem Canvas als ItemsPanel erstellen und Elemente auf dieser Zeichenfläche positionieren. Der Code, das zu tun sieht ungefähr so ​​aus:Wie verwende ich ein Silverlight2 ItemsControl, um eine Sammlung von Elementen auf einer Arbeitsfläche zu positionieren?

<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Name}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas Width="200" Height="200"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="Canvas.Left" Value="{Binding Path=XPos}"/> 
      <Setter Property="Canvas.Top" Value="{Binding Path=YPos}"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

Können Sie die gleiche Sache in einem Silverlight2 ListBox tun, oder vorzugsweise ein Item?

Antwort

2

Ich habe eine Lösung gefunden, aber (für mich) es riecht.

<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Canvas Width="200" Height="200"> 
       <TextBlock 
        Text="{Binding Path=Name}" 
        Canvas.Left="{Binding Path=XPos}" 
        Canvas.Top="{Binding Path=YPos}" /> 
      </Canvas> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas Width="200" Height="200"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

Jedes Element hat seine eigene Leinwand, so dass sie aufeinander gestapelt werden.