win 8 metro app c#multiple itemTemplate
我在地铁应用程序上工作,我有情况。 在我的一个页面中,我使用listview和一个显示图像及其名称的自定义项目模板。 现在我必须使用2个项目模板,如果图像是垂直的,我必须使用另一个高度更长的模板。 列表视图中可以有2个不同的模板吗? 我必须更改.cs中的模板, if the image is horizontal listview.ItemTemplate = 1 else if the image is vertical listvew.ItemTemplate =2
我该如何使用它?
首先创建一个自定义DataTemplateSelector
类:
public class OrientationTemplateSelector : DataTemplateSelector { protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { // cast item to your custom item class var customItem = item as CustomItem; if (customItem == null) return null; string templateName = String.Empty; if (customItem.Width > customItem.Height { // image is horizontal templateName = "HorizontalItemTemplate"; } else { templateName = "VerticalItemTemplate"; } object template = null; // find template in App.xaml Application.Current.Resources.TryGetValue(templateName, out template); return template as DataTemplate; } }
将项目模板定义为资源(在我的案例中,在App.xaml
– 确保在模板选择器内的正确位置搜索它们):
添加模板选择器作为资源(在ListView
级别如下或更高的位置,即页面或应用程序级别):
现在您可以将它设置为ItemTemplateSelector
到ListView
: