[源码下载]

背水一战 Windows 10 (58) - 控件(集合类): ListViewBase - ListView, GridView

作者:webabcd

介绍
背水一战 Windows 10 之 控件(集合类 - ListViewBase)

  • ListView
  • GridView

示例
1、ListView 的示例
Controls/CollectionControl/ListViewBaseDemo/ListViewDemo.xaml

<Page
x:Class="Windows10.Controls.CollectionControl.ListViewDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Controls.CollectionControl"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" xmlns:common="using:Windows10.Common"> <Page.Resources>
<Style x:Key="ListViewItemStyle" TargetType="ListViewItem">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<!--
ListViewItemPresenter - ListViewItem 的 Presenter(继承自 ContentPresenter, 请参见 /Controls/BaseControl/ContentControlDemo/ContentPresenterDemo.xaml)
有好多属性,详见文档
默认样式就是 generic.xaml 中的 <Style TargetType="ListViewItem"> 节点
如果需要自定义的话,那么就在 generic.xaml 中的 <Style TargetType="ListViewItem" x:Key="ListViewItemExpanded"> 节点的基础上修改
如果还不能满足要求的话就通过继承 ContentPresenter 来实现自定义的 ContentPresenter
-->
<!--
此处的 TemplatedParent 是 ListViewItem
这里借用 Tag 保存一下 ListViewItem 的 IsSelected,之后的数据模板可以绑定 ListViewItemPresenter 的 Tag,从而实现数据模板间接绑定 ListViewItem 的 IsSelected
此处通过 Tag 属性做中转,如果 Tag 有别的用处的话,那么就自己写个附加属性做中转吧
-->
<ListViewItemPresenter Margin="10" SelectedBackground="Red" SelectedPointerOverBackground="Red"
Tag="{Binding IsSelected, RelativeSource={RelativeSource Mode=TemplatedParent}, Mode=TwoWay}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<common:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Page.Resources> <Grid Background="Transparent"> <!--
ListView - ListView 控件(继承自 ListViewBase, 请参见 /Controls/CollectionControl/ListViewBaseDemo/)
ListView 的默认布局控件是 ItemsStackPanel,请参见 /Controls/CollectionControl/ItemsControlDemo/LayoutControl/ItemsStackPanelDemo.xaml
ListView 的 ItemContainer 是 ListViewItem
--> <ListView x:Name="listView" Margin="10 0 10 10"
ItemContainerStyle="{StaticResource ListViewItemStyle}"
SelectionMode="Multiple"
ItemsSource="{x:Bind Employees}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="common:Employee">
<StackPanel Height="100" Width="100" Background="Blue">
<TextBlock x:Name="lblName" Text="{x:Bind Name}" />
<TextBlock x:Name="lblIsMale" Text="{x:Bind IsMale}" />
<!--
这里有个需求:当 ListViewItem 的 IsSelected 为 true 时显示,反之则不显示
此处的 TemplatedParent 是 ListViewItemPresenter,而不是 ListViewItem,所以需要 ListViewItemPresenter 中转一下(ListViewItemPresenter 的 TemplatedParent 是 ListViewItem)
此处通过 Tag 属性做中转,如果 Tag 有别的用处的话,那么就自己写个附加属性做中转吧 如果以后 uwp 支持了 FindAncestor 的话,就可以不用中转了,直接这样写就行了
{Binding Path=IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}
-->
<TextBlock x:Name="lblAge" Text="{x:Bind Age}"
Visibility="{Binding Path=Tag, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView> <!--
通过 xaml 方式为 ListView 添加 item
<ListView>
<ListViewItem>
<TextBlock Text="item1"/>
</ListViewItem>
<ListViewItem>
<TextBlock Text="item2"/>
</ListViewItem>
<ListViewItem>
<TextBlock Text="item3"/>
</ListViewItem>
</ListView>
--> </Grid>
</Page>

Controls/CollectionControl/ListViewBaseDemo/ListViewDemo.xaml.cs

/*
* ListView - ListView 控件(继承自 ListViewBase, 请参见 /Controls/CollectionControl/ListViewBaseDemo/)
*/ using System.Collections.ObjectModel;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows10.Common; namespace Windows10.Controls.CollectionControl
{
public sealed partial class ListViewDemo : Page
{
public ObservableCollection<Employee> Employees { get; set; } = new ObservableCollection<Employee>(TestData.GetEmployees()); public ListViewDemo()
{
this.InitializeComponent();
}
}
}

2、GridView 的示例
Controls/CollectionControl/ListViewBaseDemo/GridViewDemo.xaml

<Page
x:Class="Windows10.Controls.CollectionControl.GridViewDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Controls.CollectionControl"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" xmlns:common="using:Windows10.Common"> <Page.Resources>
<Style x:Key="GridViewItemStyle" TargetType="GridViewItem">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GridViewItem">
<!--
ListViewItemPresenter - GridViewItem 的 Presenter(继承自 ContentPresenter, 请参见 /Controls/BaseControl/ContentControlDemo/ContentPresenterDemo.xaml)
默认样式就是 generic.xaml 中的 <Style TargetType="GridViewItem"> 节点
如果需要自定义的话,那么就在 generic.xaml 中的 <Style TargetType="GridViewItem" x:Key="GridViewItemExpanded"> 节点的基础上修改
如果还不能满足要求的话就通过继承 ContentPresenter 来实现自定义的 ContentPresenter
-->
<ListViewItemPresenter Margin="10" SelectionCheckMarkVisualEnabled="True" SelectedBackground="Red" CheckBrush="Yellow" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources> <Grid Background="Transparent"> <!--
GridView - GridView 控件(继承自 ListViewBase, 请参见 /Controls/CollectionControl/ListViewBaseDemo/)
GridView 的默认布局控件是 ItemsWrapGrid,请参见 /Controls/CollectionControl/ItemsControlDemo/LayoutControl/ItemsWrapGridDemo.xaml
GridView 的 ItemContainer 是 GridViewItem
--> <GridView x:Name="gridView" Margin="10 0 10 10"
ItemContainerStyle="{StaticResource GridViewItemStyle}"
SelectionMode="Multiple"
ItemsSource="{x:Bind Employees}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="common:Employee">
<StackPanel Height="100" Width="100" Background="Blue">
<TextBlock x:Name="lblName" Text="{x:Bind Name}" Foreground="Yellow" />
<TextBlock x:Name="lblAge" Text="{x:Bind Age}" Foreground="Aqua" />
<TextBlock x:Name="lblIsMale" Text="{x:Bind IsMale}" Foreground="Gray" />
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView> <!--
通过 xaml 方式为 GridView 添加 item
<GridView>
<GridViewItem>
<TextBlock Text="item1"/>
</GridViewItem>
<GridViewItem>
<TextBlock Text="item2"/>
</GridViewItem>
<GridViewItem>
<TextBlock Text="item3"/>
</GridViewItem>
</GridView>
--> </Grid>
</Page>

Controls/CollectionControl/ListViewBaseDemo/GridViewDemo.xaml.cs

/*
* GridView - GridView 控件(继承自 ListViewBase, 请参见 /Controls/CollectionControl/ListViewBaseDemo/)
*/ using System.Collections.ObjectModel;
using Windows.UI.Xaml.Controls;
using Windows10.Common; namespace Windows10.Controls.CollectionControl
{
public sealed partial class GridViewDemo : Page
{
public ObservableCollection<Employee> Employees { get; set; } = new ObservableCollection<Employee>(TestData.GetEmployees()); public GridViewDemo()
{
this.InitializeComponent();
}
}
}

OK
[源码下载]

背水一战 Windows 10 (58) - 控件(集合类): ListViewBase - ListView, GridView的更多相关文章

  1. 背水一战 Windows 10 (56) - 控件(集合类): ListViewBase - 基础知识, 拖动项

    [源码下载] 背水一战 Windows 10 (56) - 控件(集合类): ListViewBase - 基础知识, 拖动项 作者:webabcd 介绍背水一战 Windows 10 之 控件(集合 ...

  2. 背水一战 Windows 10 (57) - 控件(集合类): ListViewBase - 增量加载, 分步绘制

    [源码下载] 背水一战 Windows 10 (57) - 控件(集合类): ListViewBase - 增量加载, 分步绘制 作者:webabcd 介绍背水一战 Windows 10 之 控件(集 ...

  3. 背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation

    [源码下载] 背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation 作者:webabcd 介绍背水一战 Wind ...

  4. 背水一战 Windows 10 (48) - 控件(集合类): FlipView

    [源码下载] 背水一战 Windows 10 (48) - 控件(集合类): FlipView 作者:webabcd 介绍背水一战 Windows 10 之 控件(集合类) FlipView 示例Fl ...

  5. 背水一战 Windows 10 (49) - 控件(集合类): Pivot, Hub

    [源码下载] 背水一战 Windows 10 (49) - 控件(集合类): Pivot, Hub 作者:webabcd 介绍背水一战 Windows 10 之 控件(集合类) Pivot Hub 示 ...

  6. 背水一战 Windows 10 (50) - 控件(集合类): ItemsControl - 基础知识, 数据绑定, ItemsPresenter, GridViewItemPresenter, ListViewItemPresenter

    [源码下载] 背水一战 Windows 10 (50) - 控件(集合类): ItemsControl - 基础知识, 数据绑定, ItemsPresenter, GridViewItemPresen ...

  7. 背水一战 Windows 10 (51) - 控件(集合类): ItemsControl - 项模板选择器, 数据分组

    [源码下载] 背水一战 Windows 10 (51) - 控件(集合类): ItemsControl - 项模板选择器, 数据分组 作者:webabcd 介绍背水一战 Windows 10 之 控件 ...

  8. 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter

    [源码下载] 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter 作者:weba ...

  9. 背水一战 Windows 10 (53) - 控件(集合类): ItemsControl 的布局控件 - ItemsStackPanel, ItemsWrapGrid

    [源码下载] 背水一战 Windows 10 (53) - 控件(集合类): ItemsControl 的布局控件 - ItemsStackPanel, ItemsWrapGrid 作者:webabc ...

随机推荐

  1. Vue 使用中的小技巧

    在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧,在下将不定期更新~ 1.多图表resize事件去中心化 ...

  2. dubbo学习(zz)

    dubbo学习 博客分类: 开源软件   Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站 ...

  3. 2017/2/10springMVC中文乱码问题

    springMVC中文乱码问题 一:从jsp传到后台控制出现的乱码有以下两个方面: 1.当提交方式为get的时候(因为字符拦截器无法拦截get): 修改方法为: 再改工程里的tomcat的配置文件se ...

  4. 【RabbitMQ】 Java简单的实现RabbitMQ

    准备工作 1.安装RabbitMQ,参考[RabbitMQ] RabbitMQ安装 2.新建Java项目,引入RabbitMQ的Maven依赖 <dependency> <group ...

  5. hdu--6178(多校

    题意:要在一棵 n 个点的树上放 k 只猴子,然后删掉尽量多的边,使得删边后,每只猴子都至少和另外一只猴子相连,问最后剩下的边数. 思路:其实dfs遍历一次看有多少个点-边-点就好了,比赛的时候就觉得 ...

  6. GCC选项之-M

    大多数的C/C++编译器都支持一个“-M”的选项,即自动找寻源文件中包含的头文件.举个例子,比如mian.c包含有如下头文件. #include <stdio.h> #include &q ...

  7. 利用Delphi-cross-socket 库提升kbmmw 跨平台开发

    以前我写过了,通过httpsys 提升windows 下,delphi 多层应用.随着delphi 10.2 对linux 的支持,很多人也想在linux 下 发布kbmmw 服务器,但是官方仅通过i ...

  8. oracle 查看表行数所占空间大小

    最新数据库空间有感觉捉急了,上次,删了些数据空了800+G,撑了一个多月,现在还有400+G,每天10G的增量,多少空间也感觉不够用啊. 不能加硬盘,就只有删数据了.. 删数据,人懒,直接找表行最多, ...

  9. android 自动更新

    http://blog.csdn.net/zml_2015/article/details/50756703

  10. boost-使用format和lexical_cast实现数字和字符串之间的转换

    使用boost的format可以实现数字到string的格式化转换,boost的lexical_cast可以实现string到数值的转换,eg: #include "boost/format ...