eom*_*mer 1 c# xaml microsoft-metro windows-runtime windows-store-apps
我在地铁应用程序上工作,我有情况.在我的一个页面中,我使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
将项目模板定义为资源(在我的情况下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>
Run Code Online (Sandbox Code Playgroud)
添加模板选择器作为资源(在ListView下面或更高的级别,即页面或应用程序级别):
<ListView.Resources>
<local:OrientationTemplateSelector x:Key="OrientationTemplateSelector" />
</ListView.Resources>
Run Code Online (Sandbox Code Playgroud)
现在,您可以将其设置为ItemTemplateSelector你的ListView:
<ListView ItemTemplateSelector="{StaticResource OrientationTemplateSelector}" ItemsSource="{Binding CustomItemsList}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |