アイテムテンプレートとヘッダーテンプレートを使用してグループ化されたGridViewを作成しました。それはうまく機能しますが、それから私のリストの最初の記事に別のテンプレートを持たせたいです(より大きくするために)。たとえば、フランスのアプリケーション「LeMonde」のように。それを実現するためにテンプレートをどのように定義できるかわかりません。
これが私の現在のxamlコードです
<Page.Resources>
<CollectionViewSource x:Name="cvs1" IsSourceGrouped="True" />
</Page.Resources>
<Grid Background="White">
<GridView x:Name="PicturesGridView" SelectionMode="None"
ItemsSource="{Binding Source={StaticResource cvs1}}"IsItemClickEnabled="True" ItemClick="ItemView_ItemClick">
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel x:Name="RectanglesStackPanel" Margin="8" Orientation="Vertical" Width="242">
<Image Source="{Binding imageUrl}" Height="180" Width="225" Stretch="UniformToFill" />
<Border Background="Gray" Opacity="1" Width="225" Height="115">
<TextBlock Text="{Binding title}"
Foreground="White" TextWrapping="Wrap" Width="215" FontSize="18" />
</Border>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Button Click="Button_Click_1" Content="{Binding Key}" Foreground="Black" Background="White" FontSize="30" Margin="0,0,0,-10" ></Button>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid Orientation="Vertical" />
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</GridView.GroupStyle>
</GridView>
</Grid>
私はこのようにC#でアイテムのリストをバインドするだけです:
this.cvs1.Source = ListOfArticle;
前もって感謝します :)
Ivanありがとう。それは私を大いに助けます。ただし、例で提供されているコードは、Windows 8では最新ではないようです。ページのリソースで定義されているテンプレートにアクセスする方法について、何かアイデアはありますか。FindRessourcesメソッドはもう存在しません。代わりにこのコードを試してみましたが、成功しませんでした:
public class AuctionItemDataTemplateSelector : DataTemplateSelector
{
protected override DataTemplate SelectTemplateCore(object item,
DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Article)
{
Article auctionItem = item as Article;
DataTemplate mySmallTemplate = element.FindName("SmallTemplate") as DataTemplate;
switch (auctionItem.isFirstItem)
{
case true:
return
element.FindName("BigTemplate") as DataTemplate;
case false:
return
element.FindName("SmallTemplate") as DataTemplate;
}
}
return null;
}
}
'