原文:重新想象 Windows 8 Store Apps (11) - 控件之 ListView 和 GridView

[源码下载]

重新想象 Windows 8 Store Apps (11) - 控件之 ListView 和 GridView

作者:webabcd

介绍
重新想象 Windows 8 Store Apps 之 ListView 和 GridView

  • ListView - 列表控件
  • GridView - 网格控件

示例
1、ListView 的 Demo
ListViewDemo.xaml

<Page
x:Class="XamlDemo.Controls.ListViewDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Page.Resources>
<DataTemplate x:Key="ItemTemplate">
<StackPanel Orientation="Vertical">
<TextBlock TextWrapping="Wrap" FontSize="14.667" Text="{Binding Name}" HorizontalAlignment="Left" />
<TextBlock TextWrapping="Wrap" FontSize="14.667" Text="{Binding Age}" HorizontalAlignment="Left"/>
</StackPanel>
</DataTemplate>
<Style x:Key="ItemContainerStyle" TargetType="ListViewItem">
<Setter Property="Width" Value="292" />
<Setter Property="Height" Value="80" />
<Setter Property="Padding" Value="0" />
<!--
即使将 Margin 设置为“0”,也无法去掉 item 之间的 margin
如果想要去掉 item 之间的 margin,请将此 Margin 属性设置为“-4”
-->
<Setter Property="Margin" Value="0" />
<Setter Property="Background" Value="Blue" />
</Style>
</Page.Resources> <Grid Background="Transparent">
<Grid Margin="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> <StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="0 30 0 0">
<CheckBox Name="chkIsSwipeEnabled" Content="IsSwipeEnabled" />
<CheckBox Name="chkIsItemClickEnabled" Content="IsItemClickEnabled" Margin="10 0 0 0" />
</StackPanel> <!--后台绑定方式为 ListView 提供数据-->
<ListView x:Name="listView" Width="300" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0 60 10 10" BorderThickness="1" BorderBrush="Red" Background="LightBlue"
ItemTemplate="{StaticResource ItemTemplate}"
ItemContainerStyle="{StaticResource ItemContainerStyle}"
ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"
SelectionMode="Single"
SelectionChanged="listView_SelectionChanged_1"
IsSwipeEnabled="{Binding IsChecked, ElementName=chkIsSwipeEnabled}"
IsItemClickEnabled="{Binding IsChecked, ElementName=chkIsItemClickEnabled}"
ItemClick="listView_ItemClick_1">
</ListView> <!--
xaml 方式为 ListView 添加内容
<ListView>
<ListView.Items>
<ListViewItem>
...
</ListViewItem>
<ListViewItem>
...
</ListViewItem>
...
</ListView.Items>
</ListView>
-->
</Grid>
</Grid>
</Page>

ListViewDemo.xaml.cs

/*
* ListView - 列表控件
* IsItemClickEnabled - item 是否可被点击
* IsSwipeEnabled - 是否支持 swipe 操作(对于 ListView 来说,左右猛击 item 称之为 swipe)
* SelectionMode - item 的选中模式(Windows.UI.Xaml.Controls.ListViewSelectionMode 枚举)
* None - 不能被选中
* Single - 只能单选
* Multiple - 仅通过鼠标多选
* Extended - 通过鼠标和辅助键多选(ctrl 或 shift)
* SelectedItems - 被选中的 items 集合
* ItemClick - item 被单击时触发的事件
* SelectAll() - 选中全部 items
* ScrollIntoView(object item, ScrollIntoViewAlignment alignment) - 滚动到指定的 item
* ScrollIntoViewAlignment.Default - 与该 item 的最近边缘对齐
* ScrollIntoViewAlignment.Leading - 与该 item 的前边缘对齐
*
*
* 注:
* IsItemClickEnabled == false && IsSwipeEnabled == false 无法响应单击事件,单击则意味着选中,无法 swipe
* IsItemClickEnabled == true && IsSwipeEnabled == false 可以响应单击事件,无法响应选中事件,无法 swipe
* IsItemClickEnabled == false && IsSwipeEnabled == true 无法响应单击事件,单击和 swipe 均意味着选中
* IsItemClickEnabled == true && IsSwipeEnabled == true 可以响应单击事件,swipe 则意味着选中
*
* 关于 SemanticZoom, item的拖动, item的尺寸可变等之后通过 GridView 来介绍
*
* 关于分页加载内容在“数据绑定”一节做介绍
*/ using System.Collections.Generic;
using Windows.UI.Xaml.Controls;
using XamlDemo.Model; namespace XamlDemo.Controls
{
public sealed partial class ListViewDemo : Page
{
public ListViewDemo()
{
this.InitializeComponent(); // 绑定数据
List<Employee> dataSource = TestData.GetEmployees();
listView.ItemsSource = dataSource;
} // 单击行为的事件
private void listView_ItemClick_1(object sender, ItemClickEventArgs e)
{
lblMsg.Text = "被单击的 employee 的 name 为:" + (e.ClickedItem as Employee).Name;
} // 选中行为的事件
private void listView_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > )
lblMsg.Text = "此次操作被选中的 employee 的 name 为:" + (e.AddedItems[] as Employee).Name;
else
lblMsg.Text = "此次操作没有被选中的 employee";
}
}
}

2、GridView 的 Demo
GridView/Demo.xaml

<Page
x:Class="XamlDemo.Controls.GridView.Demo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:XamlDemo.Controls.GridView"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Page.Resources>
<DataTemplate x:Key="ItemTemplate">
<StackPanel Orientation="Vertical">
<TextBlock TextWrapping="Wrap" FontSize="14.667" Text="{Binding Name}" HorizontalAlignment="Left" />
<TextBlock TextWrapping="Wrap" FontSize="14.667" Text="{Binding Age}" HorizontalAlignment="Left"/>
</StackPanel>
</DataTemplate>
<Style x:Key="ItemContainerStyle" TargetType="GridViewItem">
<Setter Property="Width" Value="292" />
<Setter Property="Height" Value="80" />
<!--
即使将 Margin 设置为“0”,也无法去掉 item 之间的 margin
如果想要去掉 item 之间的 margin,请将此 Margin 属性设置为“-4”
-->
<Setter Property="Margin" Value="0" />
<Setter Property="Background" Value="Blue" />
</Style>
<ItemsPanelTemplate x:Key="ItemsPanel">
<!--
注:WrapGrid 继承自 VirtualizingPanel,而 VariableSizedWrapGrid 并未继承 VirtualizingPanel
-->
<WrapGrid MaximumRowsOrColumns="3" Orientation="Vertical" VerticalChildrenAlignment="Top" HorizontalChildrenAlignment="Left" />
</ItemsPanelTemplate>
</Page.Resources> <Grid Background="Transparent">
<StackPanel Margin="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> <StackPanel Orientation="Horizontal" Margin="0 10 0 0">
<CheckBox Name="chkIsSwipeEnabled" Content="IsSwipeEnabled" />
<CheckBox Name="chkIsItemClickEnabled" Content="IsItemClickEnabled" Margin="10 0 0 0" />
</StackPanel> <!--后台绑定方式为 ListView 提供数据-->
<GridView x:Name="gridView" VerticalAlignment="Top" Margin="0 10 10 0" BorderThickness="1" BorderBrush="Red" Background="LightBlue"
ItemTemplate="{StaticResource ItemTemplate}"
ItemContainerStyle="{StaticResource ItemContainerStyle}"
ItemsPanel="{StaticResource ItemsPanel}"
ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"
SelectionMode="Single"
SelectionChanged="gridView_SelectionChanged_1"
IsSwipeEnabled="{Binding IsChecked, ElementName=chkIsSwipeEnabled}"
IsItemClickEnabled="{Binding IsChecked, ElementName=chkIsItemClickEnabled}"
ItemClick="gridView_ItemClick_1">
</GridView> <!--
xaml 方式为 ListView 添加内容
<GridView>
<GridView.Items>
<GridViewItem>
...
</GridViewItem>
<GridViewItem>
...
</GridViewItem>
...
</GridView.Items>
</GridView>
-->
</StackPanel>
</Grid>
</Page>

GridView/Demo.xaml.cs

/*
* GridView - 网格控件
* IsItemClickEnabled - item 是否可被点击
* IsSwipeEnabled - 是否支持 swipe 操作(对于 GridView 来说,上下猛击 item 称之为 swipe)
* SelectionMode - item 的选中模式(Windows.UI.Xaml.Controls.ListViewSelectionMode 枚举)
* None - 不能被选中
* Single - 只能单选
* Multiple - 仅通过鼠标多选
* Extended - 通过鼠标和辅助键多选(ctrl 或 shift)
* SelectedItems - 被选中的 items 集合
* ItemClick - item 被单击时触发的事件
* SelectAll() - 选中全部 items
* ScrollIntoView(object item, ScrollIntoViewAlignment alignment) - 滚动到指定的 item
* ScrollIntoViewAlignment.Default - 与该 item 的最近边缘对齐
* ScrollIntoViewAlignment.Leading - 与该 item 的前边缘对齐
*
*
* 注:
* IsItemClickEnabled == false && IsSwipeEnabled == false 无法响应单击事件,单击则意味着选中,无法 swipe
* IsItemClickEnabled == true && IsSwipeEnabled == false 可以响应单击事件,无法响应选中事件,无法 swipe
* IsItemClickEnabled == false && IsSwipeEnabled == true 无法响应单击事件,单击和 swipe 均意味着选中
* IsItemClickEnabled == true && IsSwipeEnabled == true 可以响应单击事件,swipe 则意味着选中
*/ using System.Collections.Generic;
using Windows.UI.Xaml.Controls;
using XamlDemo.Model; namespace XamlDemo.Controls.GridView
{
public sealed partial class Demo : Page
{
public Demo()
{
this.InitializeComponent(); // 绑定数据
List<Employee> dataSource = TestData.GetEmployees();
gridView.ItemsSource = dataSource;
} // 单击行为的事件
private void gridView_ItemClick_1(object sender, ItemClickEventArgs e)
{
lblMsg.Text = "被单击的 employee 的 name 为:" + (e.ClickedItem as Employee).Name;
} // 选中行为的事件
private void gridView_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > )
lblMsg.Text = "此次操作被选中的 employee 的 name 为:" + (e.AddedItems[] as Employee).Name;
else
lblMsg.Text = "此次操作没有被选中的 employee";
}
}
}

OK
[源码下载]

重新想象 Windows 8 Store Apps (11) - 控件之 ListView 和 GridView的更多相关文章

  1. 重新想象 Windows 8 Store Apps (14) - 控件 UI: RenderTransform, Projection, Clip, UseLayoutRounding

    原文:重新想象 Windows 8 Store Apps (14) - 控件 UI: RenderTransform, Projection, Clip, UseLayoutRounding [源码下 ...

  2. 重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree

    原文:重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree [源码下载] 重新想象 ...

  3. 重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState, VisualStateManager

    原文:重新想象 Windows 8 Store Apps (15) - 控件 UI: 字体继承, Style, ControlTemplate, SystemResource, VisualState ...

  4. 重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试

    原文:重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试 [源码下载] 重新想象 Windows 8 Store ...

  5. 重新想象 Windows 8 Store Apps (13) - 控件之 SemanticZoom

    原文:重新想象 Windows 8 Store Apps (13) - 控件之 SemanticZoom [源码下载] 重新想象 Windows 8 Store Apps (13) - 控件之 Sem ...

  6. 重新想象 Windows 8 Store Apps (12) - 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示

    原文:重新想象 Windows 8 Store Apps (12) - 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示 [源码下载] 重新想象 Windows 8 Store Ap ...

  7. 重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom

    原文:重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom [源码下载] ...

  8. 重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础

    原文:重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础 [源码下载] 重新想象 Windows 8 Store Apps (9) - 控件之 Sc ...

  9. 重新想象 Windows 8 Store Apps (7) - 控件之布局控件: Canvas, Grid, StackPanel, VirtualizingStackPanel, WrapGrid, VariableSizedWrapGrid

    原文:重新想象 Windows 8 Store Apps (7) - 控件之布局控件: Canvas, Grid, StackPanel, VirtualizingStackPanel, WrapGr ...

随机推荐

  1. 位运算之 C 与或非异或

    与运算:& 两者都为1为1,否则为0 1&1=1,  1&0=0,  0&1=0,  0&0=0   或运算:| 两者都为0为0,否则为1 1|1 = 1,   ...

  2. windows mysql安装、配置

    一.MySQL的下载: 上图中,我们选择红框部分的社区版本进行下载,MySQL支持许多平台: 我的操作系统是64位的,选择对应版本MSI版下载,弹出login界面, 选择no thanks,just ...

  3. Android真机网络adb联机调试初探

    新项目是一个基于android4.2设备.刚拿到demo板时就对联机互调感兴趣了.处于以前在S3c2440上对linux的移植使用经验.心里猜测对于android设备应该也这样.所以通过搜索资料整理如 ...

  4. c语言太easy笔误的,这将做

    调试发现时间写的一样NB代码 test.c int add(string); int main() { char* p = "11222"; add(p); return 0; } ...

  5. Bigcommerce: 给已完成购买的客户发送一封产品评论邮件,让客户直接进行产品评论

    需求说明:进入后台的Order列表,更新订单状态:Awaiting Pickup后,就会给客户发送一封希望他们能进行评论的邮件.在邮件中展示该订单下的所有产品,每个产品都有一个评论的跳转链接,点击后直 ...

  6. 基于HTTP和TFTP的PXE批量自动化安装Linux系统

    CentOS 6.5 PXE自动化部署系统 拓扑图如下: 步骤: 1.  安装http服务,上传ISO文件 [root@UCS-1 ~]# yum install httpd –y [root@UCS ...

  7. Maven POM入门

    Super POM(project object model) Maven内置了一个默认的POM(不在项目中,因此不可见),每一个project都会继承自这个默认的POM,因此叫Super POM.除 ...

  8. GridView的RowDataBound事件中获取当前行内容的几种方法

    1. Cells[x].Txt.    从列单元格的文本值获取.这种方法简单高率,最为常用,但是功能单纯.此法存在几个缺点:   (1)无法获取到设置了隐藏属性的数据列的值,所取到的值为“”(空).  ...

  9. DOM中的动态NodeList与静态NodeList

    GitHub版本号: https://github.com/cncounter/translation/blob/master/tiemao_2014/NodeList/NodeList.md 副标题 ...

  10. gem5 设定checkpiont以及从checkpoint开始运行

    同spec2006中间bzip2一个例子,如何设置checkpoint .以及从checkpoint继续以启动运行.这样做的目的是为了,采纳automic运行N指令,然后detailed运行M指令. ...