如何使用Silverlight2 ItemsControl在画布上定位项目集合?

时间:2009-05-04 23:51:45

标签: silverlight listbox canvas silverlight-2.0 itemscontrol

在WPF中,您可以创建一个带有Canvas作为ItemsPanel的ListBox,并在该画布上定位项目。执行此操作的代码如下所示:

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

你可以在Silverlight2 ListBox中做同样的事情,或者最好是ItemsControl吗?

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方案,但是(对我来说)它闻起来很有气味。

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

每个项目都有自己的画布,因此它们最终堆叠在彼此之上。

相关问题