WP 7具有不同单元格高度的列表框

时间:2011-08-11 16:08:46

标签: windows-phone-7

我正在尝试构建一个包含3种不同单元格类型的ListBox。 我使用TemplateSelector进行了类型选择。 这会正确选择CellType,但不会选择单元格高度。

我希望Cell标头为50px,其他单元格类型为110px。 但标签中定义的样式会覆盖单元格高度。

我尝试在Grid元素中编写Style,但它没有效果。

有没有办法实现这个目标?

<delay:DeferredLoadListBox.ItemTemplate>
    <DataTemplate>
        <local:CellTemplateSelector
            Content="{Binding}">
                <local:CellTemplateSelector.CellHeader>
                    <DataTemplate>
                        <Grid
                            Name="MainGrid"
                            Width="480"
                            Height="50">
                            <Image />
                            <TextBlock />
                        </Grid>
                    </DataTemplate>
                </local:CellTemplateSelector.CellHeader>

                <local:CellTemplateSelector.GrayCell>
                    <DataTemplate>
                        <Grid
                            Name="MainGrid"
                            Width="480"
                            Height="110">
                            <Image />
                            <TextBlock />
                        </Grid>
                    </DataTemplate>
                </local:CellTemplateSelector.GrayCell>

                <local:CellTemplateSelector.WhiteCell>
                    <DataTemplate>
                        <Grid
                            Name="MainGrid"
                            Width="480"
                            Height="110">
                            <Image />
                            <TextBlock />
                        </Grid>
                    </DataTemplate>
                </local:CellTemplateSelector.WhiteCell>

        </local:CellTemplateSelector>
    </DataTemplate>
</delay:DeferredLoadListBox.ItemTemplate>

<delay:DeferredLoadListBox.Resources>
    <Style
        TargetType="ListBoxItem">
        <Setter
            Property="Height"
            Value="110" />
    </Style>
</delay:DeferredLoadListBox.Resources>

<delay:DeferredLoadListBox.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel />
    </ItemsPanelTemplate>
</delay:DeferredLoadListBox.ItemsPanel>
</delay:DeferredLoadListBox>

2 个答案:

答案 0 :(得分:1)

我使用您的代码对此进行了测试,发现解决您问题的最简单方法是从Style块中完全删除Height属性setter。如果让DataTemplates设置自己的高度,使用您已经使用的技术,它应该完全按照您的意图行事。

/克里斯

答案 1 :(得分:1)

谢谢你的回答克里斯。 我使用了不同的方法:

    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

   <toolkit:LongListSelector
                    x:Name="citiesListGropus"
                    Background="White"
                    ItemTemplate="{StaticResource ContentCellTemplate}"
                    GroupHeaderTemplate="{StaticResource ActualityGroupHeaderTemplate}"
                    Margin="0,66,0,0" Grid.Row="1" MouseEnter="citiesListGropus_MouseEnter" MouseLeave="citiesListGropus_MouseLeave">

......................  

从这里开始:

http://silverlight.codeplex.com/releases/view/55034

ContentCellTemplate和ActualityGroupHeaderTemplate是每种细胞类型的模板。