gpt4 book ai didi

windows - 分组 gridView 中的不同项目大小

转载 作者:可可西里 更新时间:2023-11-01 13:01:14 26 4
gpt4 key购买 nike

我使用项目模板和标题模板创建了一个分组的 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# 中绑定(bind)我的项目列表:

this.cvs1.Source = ListOfArticle;

提前谢谢你:)


谢谢伊万。这对我有很大帮助。然而,示例中提供的代码对于 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;
}
}

'

最佳答案

我按照创建自定义 DataTemplateSelector 的方式将所有需要的模板作为属性。

namespace Helper
{
public class CustomSampleDataTemplateSelector : DataTemplateSelector
{
public DataTemplate FirstDataTemplate { get; set; }

public DataTemplate SecondDataTemplate { get; set; }

protected override DataTemplate SelectTemplateCore(object item,
DependencyObject container)
{
if (item is FirstItemType)
return FirstDataTemplate ;
if (item is SecondItemType)
return SecondDataTemplate;
else
return FirstDataTemplate ;
}
}
}

现在您可以像这样在 XAML 中直接使用它:

声明资源:

<UserControl.Resources>
<DataTemplate x:Key="myTemplate1">
<Border Background="White">
<TextBlock Text="{Binding Name}"
FontSize="40"
Foreground="Black"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Border>
</DataTemplate>
<DataTemplate x:Key="myTemplate2">
<Border Background="Orange">
<Grid>
<Image Source="{Binding Image}"></Image>
<TextBlock Text="{Binding ShopName}"
FontSize="64"
Foreground="LightBlue"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
</Border>
</DataTemplate>
<Common:CustomSampleDataTemplateSelector x:Key="mySelector"
FirstDataTemplate="{StaticResource myTemplate1}"
SecondDataTemplate="{StaticResource myTemplate2}">
</Common:CustomSampleDataTemplateSelector >
</UserControl.Resources>

使用它

<GridView  x:Name="PicturesGridView" ItemTemplateSelector="{StaticResource mySelector}">

就这样

关于windows - 分组 gridView 中的不同项目大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11798871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com