C# ListView将ListViewHeaderItem保持在顶部
我首先解释我想要实现的目标: 字母“A”是我的Listview中的一个ListViewHeaderItem。如果不滚动,列表顶部看起来是这样的 在我滚动ListViewHeaderItem“A”之后,它与其他项目一起向下移动- 但我如何才能实现标题作为第一项一直保持在顶部,直到带有ist子项的字母“B”出现?我想要实现的行为的一个例子是微软针对Windows10的官方“邮件”应用程序。它将日期时间保持在最上面,直到提前一天写好的电子邮件到来C# ListView将ListViewHeaderItem保持在顶部,c#,xaml,listview,header,uwp,C#,Xaml,Listview,Header,Uwp,我首先解释我想要实现的目标: 字母“A”是我的Listview中的一个ListViewHeaderItem。如果不滚动,列表顶部看起来是这样的 在我滚动ListViewHeaderItem“A”之后,它与其他项目一起向下移动- 但我如何才能实现标题作为第一项一直保持在顶部,直到带有ist子项的字母“B”出现?我想要实现的行为的一个例子是微软针对Windows10的官方“邮件”应用程序。它将日期时间保持在最上面,直到提前一天写好的电子邮件到来 我不知道这个问题是否已经存在,但我不知道它是如何命名的
我不知道这个问题是否已经存在,但我不知道它是如何命名的,我也不知道用谷歌搜索什么。根据您的描述,我认为您需要的是分组列表视图。这里的要点是使用as
ItemsSource
和设置来指定组的显示方式。以下是一个简单的示例:
在XAML中
<Page.Resources>
<CollectionViewSource x:Name="groupInfoCVS" IsSourceGrouped="True" />
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView ItemsSource="{Binding Source={StaticResource groupInfoCVS}}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Margin="15" Text="{Binding Path=Text}" />
</DataTemplate>
</ListView.ItemTemplate>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Background="LightGray">
<TextBlock Margin="10" Foreground="Black" Text="{Binding Key}" />
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
</Grid>
在代码背后
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
List<TestDemo> list = new List<TestDemo>();
for (int i = 0; i < 6; i++)
{
list.Add(new TestDemo { Key = "A", Text = $"Test A {i}" });
list.Add(new TestDemo { Key = "B", Text = $"Test B {i}" });
}
var result = from t in list group t by t.Key;
groupInfoCVS.Source = result;
}
}
public class TestDemo
{
public string Key { get; set; }
public string Text { get; set; }
}
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
列表=新列表();
对于(int i=0;i<6;i++)
{
添加(newtestdemo{Key=“A”,Text=$“testa{i}”);
添加(newtestdemo{Key=“B”,Text=$“Test B{i}”);
}
var结果=从列表组t中的t开始,按t键;
groupInfoCVS.Source=结果;
}
}
公共类测试演示
{
公共字符串密钥{get;set;}
公共字符串文本{get;set;}
}
它看起来像:有关更多信息,请参阅GitHub中的和简单ListView示例。根据您的描述,我认为您需要的是分组ListView。这里的要点是使用as
ItemsSource
和设置来指定组的显示方式。以下是一个简单的示例:
在XAML中
<Page.Resources>
<CollectionViewSource x:Name="groupInfoCVS" IsSourceGrouped="True" />
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView ItemsSource="{Binding Source={StaticResource groupInfoCVS}}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Margin="15" Text="{Binding Path=Text}" />
</DataTemplate>
</ListView.ItemTemplate>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Background="LightGray">
<TextBlock Margin="10" Foreground="Black" Text="{Binding Key}" />
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
</Grid>
在代码背后
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
List<TestDemo> list = new List<TestDemo>();
for (int i = 0; i < 6; i++)
{
list.Add(new TestDemo { Key = "A", Text = $"Test A {i}" });
list.Add(new TestDemo { Key = "B", Text = $"Test B {i}" });
}
var result = from t in list group t by t.Key;
groupInfoCVS.Source = result;
}
}
public class TestDemo
{
public string Key { get; set; }
public string Text { get; set; }
}
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
列表=新列表();
对于(int i=0;i<6;i++)
{
添加(newtestdemo{Key=“A”,Text=$“testa{i}”);
添加(newtestdemo{Key=“B”,Text=$“Test B{i}”);
}
var结果=从列表组t中的t开始,按t键;
groupInfoCVS.Source=结果;
}
}
公共类测试演示
{
公共字符串密钥{get;set;}
公共字符串文本{get;set;}
}
它看起来像:有关更多信息,请参阅GitHub中的和简单列表视图示例。请参阅我对这个问题的评论,因此基本上,在出现标题之前,标题将保持不变。一旦你的“B”;出现时,用B更新标题,向下滚动时,用A更新。@AVKNaidu您建议将当前标题从正在更新值的listview中删除。这在某些情况下是好的,但我想达到原来的行为-它也有一个很酷的annimation…请描述你的情况,并在现有的应用程序中给出一个例子。这类似于已安装应用程序的列表?请参阅我对这个问题的评论,因此基本上,在出现标题之前,标题将保持不变。一旦你的“B”;出现时,用B更新标题,向下滚动时,用A更新。@AVKNaidu您建议将当前标题从正在更新值的listview中删除。这在某些情况下是好的,但我想达到原来的行为-它也有一个很酷的annimation…请描述你的情况,并在现有的应用程序中给出一个例子。它类似于已安装应用程序的列表?