Как использовать Silverlight2 ItemsControl для позиционирования коллекции элементов на холсте? - PullRequest
3 голосов
/ 05 мая 2009

В WPF вы можете создать ListBox с Canvas в качестве ItemsPanel и расположить элементы на этом холсте. Код для этого выглядит примерно так:

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

Можете ли вы сделать то же самое в ListBox Silverlight2 или предпочтительно в ItemsControl?

1 Ответ

2 голосов
/ 05 мая 2009

Я нашел решение, но (для меня) оно пахнет.

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

У каждого предмета есть свой холст, поэтому они укладываются друг на друга.

...