簡體   English   中英

贏得8個Metro應用程序C#多個itemTemplate

[英]win 8 metro app c# multiple itemTemplate

我正在開發Metro應用,但遇到了情況。 在我的其中一個頁面中,我將listview與一個自定義項目模板一起使用,該模板顯示圖像及其名稱。 現在,如果圖像是垂直的,我必須使用2項模板。我必須使用另一個具有更高高度的模板。 listview中可以有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 -確保在模板選擇器內的正確位置搜索它們):

<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>

現在,您可以將其設置為ListView ItemTemplateSelector

<ListView ItemTemplateSelector="{StaticResource OrientationTemplateSelector}" ItemsSource="{Binding CustomItemsList}" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM