Canvas作为ListBox ItemTemplate

时间:2011-12-22 13:41:53

标签: c# silverlight windows-phone-7 canvas

我的环境是Windows Phone 7.1。

我有以下代码:

     <ListBox  ItemsSource="{Binding Path=Items}">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas Background="Black" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Canvas  Width="200" Height="400"
                    Canvas.Top="400"> <====== This is not working
                   ... Some content ...
                </Canvas>
            </DataTemplate>
        </ListBox.ItemTemplate>

有一个ListBox CanvasItemsPanel

ListBoxItems本身也属于Canvas类型。对于ListBoxItems我设置Canvas.Top =400,我希望ItemsPanel中的项目偏移量为400。

不幸的是,这不起作用,项目的偏移量为0,如此图所示(ItemsPanel为黑色,彩色矩形为listitem):

enter image description here

为什么ListBoxItems的偏移量不是400?

2 个答案:

答案 0 :(得分:4)

您在Canvas.Top的内容上设置ListBoxItems而非实际项目

当使用画布作为项目面板时,您必须记住您的datatemplated对象包含在ListboxItems

ListBox
  Canvas <- your itemtemplate
    ListBoxItem
      Canvas <- your datatemplate

溶液:

<ListBox.ItemContainerStyle>
  <Style TargetType="ListBoxItem">
     <Setter Property="Canvas.Top" Value="400"/>
  </Style>
</ListBox.ItemContainerStyle>

答案 1 :(得分:2)

尝试将此添加到您的ListBox

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</ListBox.ItemContainerStyle>

因为您看到,黑区是ListBox,而不是您的ListBoxItem。由于“常见的错误”,如果我们仍然可以调用它,ListBoxItem不会延伸,除非您添加上面的代码。