我正在开发一个地铁应用程序,我遇到了一些情况。在我的一个页面中,我使用了带有自定义项目模板的列表视图,该模板显示图像及其名称。现在我必须使用 2 项模板,如果图像是垂直的,我必须使用另一个高度更长的模板。o listview 中可以有 2 个不同的模板吗?我必须更改 .cs 中的模板,例如
if the image is horizontal listview.ItemTemplate = 1
else if the image is vertical listvew.ItemTemplate =2
如何使用它?
问问题
1688 次
1 回答
6
首先创建一个自定义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
- 确保在模板选择器内的正确位置搜索它们):
<Application.Resources>
<DataTemplate x:Key="HorizontalItemTemplate">
<!-- item template for horizontal image -->
</DataTemplate>
<DataTemplate x:Key="VerticalItemTemplate">
<!-- item template for vertical image -->
</DataTemplate>
</Application.Resources>
将模板选择器也添加为资源(在以下ListView
级别或更高级别,即页面或应用程序级别):
<ListView.Resources>
<local:OrientationTemplateSelector x:Key="OrientationTemplateSelector" />
</ListView.Resources>
现在您可以将其设置为ItemTemplateSelector
您的ListView
:
<ListView ItemTemplateSelector="{StaticResource OrientationTemplateSelector}" ItemsSource="{Binding CustomItemsList}" />
于 2013-03-12T05:35:57.063 回答