Ho creato una GridView raggruppata con un modello di elemento e un modello di intestazione. Funziona bene, ma poi vorrei che il primo articolo della mia lista avesse un modello diverso (per essere più grande). Come l'applicazione francese "LeMonde" per esempio. Non ho idea di come potrei definire il modello per ottenerlo.Dimensioni oggetto diverse in una griglia raggruppataView
Ecco il mio codice XAML corrente
<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>
Ho appena legano mia lista di elemento in C# come questo:
this.cvs1.Source = ListOfArticle;
Grazie in anticipo :)
Grazie tu Ivan. Mi aiuta molto. Tuttavia, il codice fornito nell'esempio non sembra aggiornato per Windows 8. Avete qualche idea su come possiamo accedere a un modello definito nelle risorse di una pagina. Il metodo FindRessources non esiste più. Ho provato con questo codice, invece, ma non ha avuto successo:
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;
}
}
'
Non dovresti mettere cose come "Windows 8" nel tuo titolo. Ecco a cosa servono i tag. – mydogisbox
Sì: http://blog.jerrynixon.com/2012/08/windows-8-beauty-tip-using.html –