我正在开发Metro应用,但遇到了情况。
在我的其中一个页面中,我将listview与一个自定义项目模板一起使用,该模板显示图像及其名称。
现在,如果图像是垂直的,我必须使用2项模板。我必须使用另一个具有更高高度的模板。 listview中可以有2个不同的模板吗?
我必须在.cs中更改模板,例如if the image is horizontal listview.ItemTemplate = 1else 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
中-确保在模板选择器内的正确位置搜索它们):<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}" />
关于c# - 赢得8个Metro应用程序C#多个itemTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15342851/