我正在尝试构建一个包含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>
答案 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是每种细胞类型的模板。