在 WP8 上,我想在这样的页面上显示一个列表:
我知道我可以使用 WP8.1 和 VariableSizedWrapGrid 控件轻松做到这一点。但我需要让它在 WP8.0 上工作。所以我尝试了 Kinnara 的工具包:https ://www.nuget.org/packages/WPtoolkit.Kinnara/ 其中包含一个 VariableSizedWrapGrid。
我可以做我想要的显示(见屏幕截图),但我不能在 LongListSelector 或 ListBox 中使用它作为 ItemPanelTemplate。
这是我尝试过的代码(它的灵感来自一种适用于 Windows 8 的方法,但不幸的是它似乎不适用于 WP8)以及这篇博文:http: //mtaulty.com/CommunityServer/blogs /mike_taultys_blog/archive/2012/09/14/windows-8-xaml-and-displaying-multiple-sized-items.aspx。
<local:SpecificListBox x:Name="LB_Wings" ItemTemplate="{StaticResource IT_Wings}" >
<local:SpecificListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:VariableSizedWrapGrid ItemWidth="100" ItemHeight="100" MaximumRowsOrColumns="4"></toolkit:VariableSizedWrapGrid>
</ItemsPanelTemplate>
</local:SpecificListBox.ItemsPanel>
<local:SpecificListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="toolkit:VariableSizedWrapGrid.RowSpan" Value="{Binding ItemSize}" />
<Setter Property="toolkit:VariableSizedWrapGrid.ColumnSpan" Value="{Binding ItemSize}" />
</Style>
</local:SpecificListBox.ItemContainerStyle>
</local:SpecificListBox>
数据模板:
<DataTemplate x:Key="IT_Wings">
<Grid Margin="0,0,12,12" >
<Image Source="{Binding BI_List}" Stretch="UniformToFill" </Image>
</Grid>
</DataTemplate>
SpecificListBox 只是一个继承 ListBox 并覆盖 PrepareContainerForItemOverride 方法的类:
class SpecificListBox : ListBox
{
public SpecificListBox() { }
protected override void PrepareContainerForItemOverride(System.Windows.DependencyObject element, object item)
{
dynamic lateBoundItem = item;
int sizeFactor = (int)lateBoundItem.ItemSize;
element.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, sizeFactor);
element.SetValue(VariableSizedWrapGrid.RowSpanProperty, sizeFactor);
base.PrepareContainerForItemOverride(element, item);
}
}
现在在后面的代码中,我只是用一个项目列表(具有 ItemSize 属性)填充 LB_Wings :
LB_Wings.ItemsSource = listOfItems; //a list of items that have the ItemSize property.
不幸的是,我在初始化页面时收到错误:“无法创建类型的实例:SpecificListBox”。
我想我已经接近解决方案了。谁能帮我做这种显示(这在 WP8 上看起来很自然)但是使用 ListBox 和 ItemPanelTemplate 吗?
非常感谢