【eoe 特刊】Windows 8 第一期 -- C#基本语法---sqlite数据库的使用---ListView 滚动加载 ---等

【eoe 特刊】Windows 8 第一期

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

目录

前言
一.Windows 8 简介二.Windows8 支持的开发语言三.开发环境搭建四.源码详解五.解决方案说明

【eoe 特刊】Windows 8 第一期

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

前言

Windows 8 是微软于北京时间 2012 10 25 23 15 分推出的最新 Windows 系列系统。Windows 8 支持个人电脑(X86 构架)及 Windows 8 全新 Windows UI 平板电脑(X86 构架 或 ARM 构架)。Windows8 大幅改变以往的操作逻辑,提供更佳的屏幕触控支持。新系统画面与操作方式变化极大,采用全新的 Metro(新 Windows UI)风格用户界面,各种应用程序、快捷方式等能以动态方块的样式呈现在屏幕上,用户可自行将常用的浏览器、社交网络、游戏、操作界面融入。

随着 Windows 8 的正式发布,开发者介入这一新平台也逐渐成为时下热门的事情。但每一个新事物带来的不光是新技术新特点,更多的人会感觉到陌生,无从下手。

基于这个原因,我们 eoeWP 社区编写了这期特刊,为广大还在观望中的开发者带来一些解惑的干货。权作抛砖,只为引玉。

感谢 mx_2012 同学在这次编写中的全力支持,xxy_820109 同学提供的封面设计,感谢开发团队在校稿过程中给出的宝贵意见。

【eoe 特刊】Windows 8 第一期

eoeWP 社区网址 http://wp.eoe.cn
WP @ Windows 8 开发群 215375610 (进群暗号“eoe”)eoeWP 社区微博 http://www.weibo.com/eoewp

果子狸

2012.11.19

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

一.Windows 8 简介
1.1. Windows8 历史性转变

【eoe 特刊】Windows 8 第一期

Windows8 是由微软公司开发的,具有革命性变化的操作系统。该系统旨在让人们的日常电脑操作的更加简单快捷,为人们提供高效易行的工作环境。Windows8 将支持来自 Intel、AMD ARM 的芯片架构。2011 年 9 14 日,Windows8 开发者预览版发布,宣布兼容移动终端,微软将苹果的 iOS、谷歌的 Android 视为 Windows 8 在移动领域的主要竞争对手。2012年 2 月,微软发布“视窗 8”消费者预览版,可在平板电脑上使用,2012 8 2 日,微软宣布 Windows8 开发完成,正式发布 RTM 版本。2012 年 10 26 日,微软发布 Windows8 正式版本。从此时开始代表 Windows8 的时代到来。

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

1.2. Windows8 前景一片光明

Windows8 的确还有很多需要完善的地方,例如它的兼容性问题,仍没有 Windows 完善,例如它的操作模式,仍需要人们花时间去熟悉,但是这些在 Windows 之前的版本都出现过,而且与之前不同的是,这次微软对 Windows8 重视超过以往的任何操作系统,而且微软目的是打造一个新的用户习惯,让我们的手机、平板、电脑有一致的操作。微软尝试从 PC 端入手击败 Android iOS.让我们期待 Windows8 时代的到来。

【eoe 特刊】Windows 8 第一期

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

1.3. Windows8 的优势
1.3.1 微软在企业级和消费级领域仍然是 NO.1

用户更熟悉 Windows 操作系统

微软的 Windows 操作系统已经深入人心,已经不能撼动。所以作为用户我们更会接受微软在操作系统上的变化。

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

【eoe 特刊】Windows 8 第一期

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

1.3.2 Windows8 新增功能让人眼前一亮

预计微软针对 Windows8 还将开发更多的“手势触摸”功能,将使得 Metro applicationsReaxys 具有身临其境的感觉。比如,微软正在设计屏幕缩放功能的“手势触摸”,以方便Windows8 用户能够在屏幕上轻松的实现分组处理、增减应用软件、移动文件等功能。

IE 与内置键盘,IE 浏览器也可以通过屏幕键盘进行操作,使用起来十分便利。IE 浏览网页,基于 Windows 8 平台开发的新版本 IE 浏览起网页来,也别有一番不同的体验。

  触摸输入屏幕内内置键盘,使用户使用非常方便。

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

【eoe 特刊】Windows 8 第一期

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

1.3.3 Windows8 特色功能一一亮相
聚焦视图,用户通过
Windows 8 可以随心所欲地聚焦、放大视图。比如,当用户想查看

游戏应用群组时,可以将其拖拽到界面左端,该区域将会放大。

屏幕键盘,Windows 8 操作系统强调触摸潮流,除了实体鼠标和键盘外,IT 运维管理还提供了一个屏幕键盘,方便平板电脑以及触摸屏 PC 用户使用,也符合目前手指操控的趋势。

Metro UI RSS 新闻聚合器,Metro 用户界面内置 RSS 阅读器,专为触摸屏打造,可以用手指滑动,且视觉效果很好。扩展版 RSS 新闻聚合器,这是 RSS 新闻聚合器的扩展版,用户可以用手指滑上滑下对文章进行选择,抑或是左右调换正在阅读的文章。

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

二.Windows8 支持的开发语言

微软针对 Windows 8 以及支持很多的开发语言,包括常用的 C++,JavaScript/Html5,VisualBasic,VisualStudio C#/XAML。然而微软试图在下一代 PC 操作系统上添加更多的开发语言支持。

Windows8 语言的选择

针对语言选择这个问题,有很多人会问哪中语言的兼容性最好,那种语言的性能最好。当然肯定是 C++会相对于其他语言好一些,但是我们不需要为了 Windows8 专门去学习 c++,完全可以针对你现在已经会的语言进行开发。比方说我以前是.NET 编程,现在完全可以利用C#+XAML 进行 Windows8 编程。

2.1 XAML

2.1.1 XAML 简介
XAML eXtensible Application Markup Language 的英文缩写,相应的中文名称为可扩

展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言。XAML 提供了一种便于扩展和定位的语法来定义和程序逻辑分离的用户界面,而这种实现方式和 ASP .NET中的"代码后置"模型非常类似。XAML 是一种解析性的语言,尽管它也可以被编译。它的优点是简化编程式上的用户创建过程,应用时要添加代码等。

2.1.2 XAML 优势
XAML 可以设计出专业的 UI 动画
XAML 不需要专业的编程知识,它简单易懂、结构清晰
XAML 是设计师能直接参与软件开发,随时沟通、无需二次转化
XAML 另一个巨大的优点就是:它帮助开发团队真正实现了 UI 与逻辑的剥离。XAML

是一种单纯的声明型语言,也就是说,它只能用来声明一些 UI 元素、绘制 UI 和动画,根本无法在其中加入程序逻辑,这就强制地把逻辑代码从 UI 代码中赶走。这样行政了一种“高内聚-低耦合”的结构。

2.1.3 XAML 基础知识使用代码创建 UI 元素

使用 XAML 标记构建可视界面(UI)元素并不是我们唯一的选择,我们也可以通过使用后台代码来实现,虽然这不是我们常用的方式,但这可以使我们更好的理解 XAML。在.NET 中 XAML 中的绝大部分元素都有对应的类,这些元素的特征对应的属性。例如:

XAML 中的属性继承一般分类的应用程序框架层次是这样的:

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

【eoe 特刊】Windows 8 第一期

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

如果我们在 ItemsPage.xaml Page 标签中定义属性 FontFamily="Italic",我们可以看到这个标签中设置的属性会作用与整个页面,这就是被称为(PropertyInheritance)的特征。如果在当前标签也有相同属性设置的话,这里就有个优先级的问题:

1. 本地设置优先级最高
2. 样式的优先级第二高
3. 属性继承的优先级第三高4. 默认值的优先级最低

属性元素(property-element)语法
通常我们在
XAML 代码中通常是这样设置一个元素属性,例如:

但是我们知道 XAML 是基于 XML 的,所以我们完全可以根据 XML 语法将前面的代码继续

拆分成:


30
#000

和前面达到的效果完全一样。这就是属性元素(Property-element)语法,这是 XAML 中比较重要的组成部分,通过引入属性元素语法可以进一步明确与.NET 和 XML 的相关术语:

元素对象(object element)—基于 XML 的.NET 对象
属性特征(property
attribute)—通过 XML 特征设置的.NET 属性
属性元素(property
element)—用 XML 元素表示的一个.NET 属性我们需要注意的是:在属性元素标签中出现任何其他东西都是非法的,并且不能够为同

一个属性设置属性特征和属性元素。
  资源集合

在我们编写 Windows8 应用程序的时候会有很多 XAML 文件有重复的标记,例如Margin,HorizontalAlignment 等设置,其实我们可以通过累死 HTML 中使用 CSS 的样式,在 XAML中使用样式资源(style)。但是样式有一个先决条件:一种更普遍的共享机制:资源(Resrouce)。

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

XAML 资源通常作为一个特殊的.NET 类或者结构体实力,要么是一个现有类或者结构体,要么是自定义类。当一个特定类被定义为 XAML 资源时候,系统会创建一个该类的实力,该实例将引用在该资源的各个对象之间共享。

为了支持资源的存储,FrameworkElement 定义了一个 ResourceDictionary 类型的 Resources属性。在我们的 APP .xaml文件中定义了一个为空的资源片段,如:

我们只需要把我们写的资源类引用到 Application.Resources 标签中就可以在任意地方调用,例如:

在代码中引用资源
通过资源名称简单的索引
Resource 属性,我们就可以在代码中使用 XAML 资源,例如:This.btn.Margin=(Thickness)this.Resources[“Margin”];

使用 XAML 样式
在前面的
XAML 资源的基础之上,我们可以通过使用 XAML 样式进一步重用元素的样式代码。XAML 样式基本上是为特定的元素类型分配的属性集合。XAML 样式有两个重要的属性:x:key(引用键)和 TargetType(作用的元素类型)。下面我们来看一段实例:


上述就是 XAML 的基础知识,希望你能快速掌握,尽快投入到 Windows8 开发中去。

2.2 C#.NET

2.1.1 C#简介
C#是微软公司发布的一种面向对象的、运行于 .NET Framework 之上的高级程序设计语言。并定于

在微软职业开发者论坛 (PDC)上登台亮相。 C#是微软公司研究员 Anders Hejlsberg 的最新成果。 C#看起来与 Java 有着惊人的相似 ;它包括了诸如单一继承 、接口、与 Java 几乎同样的语法和编译成中间代码再运行的过程。但是 C#与 Java 有着明显的不同,它借鉴了 Delphi 的一个特点,与 COM(组件对象模型)是直接集成的,而且它是微软公司 .NET Windows 网络框架的主角。

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

2.1.2 C#优势高效性与安全性

支持现有的网络编程新标准
消除大量程序错误
对版本的更新提供内在的支持降低了开发成本
良好的扩展交互性
C#是一种现代的面向对象语言。它使程序员快速便捷地创建基于 Microsoft .NET 平台

的解决方案。这种框架使 C#组件可以方便地转化为 XM L 网络服务,从而使任何平台的应用程序都可以通过 Internet 调用它。

C#增强了开发者的效率,同时也致力于消除编程中可能导致严重结果的错误。C#使C/C++程序员可以快速进行网络开发,同时也保持了开发者所需要的强大性和灵活性。

使用 C#+XAML 开发2.1.3 C#基础知识

下面进行一些简单的基础知识介绍:C#基础知识之.NetFramework 简介

.netframework 运行于操作系统之上,提供良好的跨语言特性。
.netframework 包含两个内容:公共语言运行时(CLR)和类库集(FCL)
MSIL 微软中间语言。当编译.net 支持的语言编写的代码的时候,输出的代码为 MSILCLR 又包含:通用语言规范(CLS:保证语言互操作性的一组规则)和公共类型系统(CTS:包含了.net 支持的各语言间兼容的数据类型和功能)

C#中的变量和常量
C#中的基本数据类型:
值类型和引用类型
值类型:简单类型、结构类型和枚举类型。简单类型:整数类型、浮点类型、小数类型(decimal)和布尔类型等
sbyte 是有符号的,相当 java byte 型,范围-128~127

C#中 byte 是无符号的,范围 0~255C#基础知识之变量命名方法:帕斯卡命名法和骆驼命名法

   帕斯卡命名法:如果有多个单词组成,每个单词首字母大写

骆驼命名法:如果有多个单词组成,第一个单词全部小写,后面的单词大写C#中的常量:const readonly 两种

const 声明的常量:叫静态常量,必须声明时就初始化,且只能用常数值初始化readonly 声明的常量:叫动态常量,可以在声明时不初始化,只能在构造函数中初始化,但必须每个构造函数中都要初始化;而且可以使用变量值初始化

【eoe 特刊】Windows 8 第一期

classT est{

const float PI=3.1416f;readonly float G;public Test()
{

G=9.80F;}

//常量命名:全部大写

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

public Test(floatg)//每个构造函数中都要初始化;而且可以使用变量值初始化{

G=g;}

}

C#中的装箱和拆箱
装箱:值类型转换成有引用类型
拆箱:引用类型转换成值类型
值类型:存在栈中引用类型:在堆中存放对象的地址(即引用),对象本身存放在栈中拆装箱允许值类型和引用类型相互处理

C#语法
Switch()括号中可以是 int ,char string ,switch 语句中的 case 语句冒号后什么都不写,可以不写 break,其他情况一定要写 break,否则报错

数组:五种声明方式

int[] array;array=new int[2];

//第二种声明方式int[] array1=new int[2];

//第三种声明方式int[] array2={1,2,3};

//第四种声明方式
int[] array3=new int[]{1,2,3};

//第五种声明方式
int[] array4=new int[3]{1,2,3};

//数组大小也可以是变量Int count=3;
int[] arr=new int[count];

C#基础知识之枚举:用有意义的字符去访问数据
Public enum Contry : long//指定枚举类型,必须是整型,不写为 int {

Pacific,//第一个未付值,默认为零China=1860,
Japan,
US=1901,

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

Canada

}

C#中的面向对象析构函数:函数名与构造函数名一样,~函数名(),不接受参数,由垃圾回收器自动调用(GC.Collect()调用垃圾回收器)

virtual 关键字:C#中,子类要重写父类的方法,必须把父类的方法标识为 virtual(虚拟的),同时重写方法用 override 修饰
new 关键字:new 关键字:在子类中定义的一个和父类方法签名一样,但是个全新的方法。并非重写父类的方法。

base 关键字:用 base 关键字调用父类的方法

访问修饰符:
public 公有的,
internal 在一个项目中的,
protected 有父子关系的类,
private 仅所属类的成员注意:如果有一个类既继承类又实现接口,类名要写在接口名前面。

属性,索引器,委托,事件
属性:访问修饰一般为
public,首字母大写。属性内有 get set 访问器,get 内必须要有 return,set 内有 value 关键字,代表从外部接受的值。索引器:索引器的作用:像处理数组一样去处理类的对象。

Public class Student{

Private string[] obj=new string[10];

//this 关键字在这里代表每一个类的对象,[]中整数是指通过下标访问Public string this[intindex]//此是可以通过索引号去访问每一个类的成员

{
get

{
Return obj [index];

}set{

obj [index] = value;}

}staticvoidMain(string[]args){

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

【eoe 特刊】Windows 8 第一期

if(value! = null)

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

Student stucollection=new Student();stucollection[0]="a";stucollection[1]="b";stucollection[5]="c";

}}

12.C#基础知识之委托:相当于函数指针,可使程序在运行是再指定具体要运行的方法。(1) 定义委托:PublicdelegateintCall()
(2) 实例化委托:objcall=newCall(方法名)
(3) 调用委托:objcall();

【eoe 特刊】Windows 8 第一期

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

三.开发环境搭建

Windows8 的环境搭建非常简单,只要两步就可以搭建完成 Windows8 开发环境,废话不多说,赶紧让我们进入环境搭建:

3.1 Windows8 操作系统

必须要 Windows8 操作系统,不然不能建立 Windows8 app。
Windows8 64
位系统下载地址:
http://kuai.xunlei.com/d/GRSAQTPNXHIC
ps: 1.双显卡的注意下,Windows8 现在对双显卡的兼容性不是太靠谱,装前请三思。

2.安装 Window8 前请先准备一个 Windows8 序列号,以方便安装。3.2 visual studio 2012

Visual Studio 2012 所有版本下载地址:http://www.microsoft.com/visualstudio/chs/downloads
提示:Windows8 可以直接使用资源管理器打开 iso 文件,系统会为你自动虚拟一个光盘镜像

下面进入 visual studio 2012 安装选择界面

  选择过后进入真正的安装过程

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

【eoe 特刊】Windows 8 第一期

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

这个速度取决于自己机器的配置,一般都需要半个小时左右。Ps: 安装完成后需要获取个开发者验证

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

四.源码详解

下面是从两个小例子里边找出比较有代表性的代码,为大家详细讲解一下,稍后会上传代码。

4.1 数据库 SQLite 使用

SQLite 是轻量级的数据库,具有很多不错的特点。而且 SQLite 是移动开发总最常用的数据库,下面

我来说一下 SQLite 在 Windows8 里边怎么使用。4.1.1 当然是创建工程

4.1.2 引用 SQLite 第三方组件
4.1.2.1 在visualstudio2012中选择工具—>扩展和更新,选择联机(online),在搜索框内输入sqlite

把 SQLite for Windows Runtime 安装上
4.1.2.2 右键项目添加引用,然后选择 Windows�扩展出现下面窗口

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

【eoe 特刊】Windows 8 第一期

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

Mircosoft visual c++ runtime package 以及 sqlite for Windows runtime 二者勾选上 ,单击确


4.1.2.3 右键选解决方案,选择属性,配置属性,将平台选择为对应的平台,暂时不支持
anycpu

如上图 x64
4.1.2.4 点击工程,选择管理 nuget 程序包..,在联机中搜索 sqlite-net,点击安装

安装成功后会生成两个文件: SQLite.cs 与 SQLiteAsync 到此完成安装部署4.1.3 创建对应表的类

声明一个 person 类也就是表主键自动增长class Person

{

[SQLite.AutoIncrement, SQLite.PrimaryKey]public int ID { get; set; }
public string FirstName { get; set; }public string LastName { get; set; }

}//Person 里边字段对应数据表里的字段4.1.4 设置 SQLite 链接字符串

链接字符串就是你数据库放置的位置,给一个我常用的位置
Public string dbPath = Package.Current.InstalledLocation.Path + @"\Assets\testdb.db";这个目录指向项目下面的资源目录 Assets 下的数据库如下图:

4.1.5 对数据库进行操作
//sqlite 语句简单示例

//连接数据库
string dbPath = Package.Current.InstalledLocation.Path + @"\Assets\testdb.db";var db = new SQLite.SQLiteConnection(dbPath);
//插入操作。首先声明一个集合
ObservableCollection Collection = new ObservableCollection();//单条插入语句
db.Insert(new Person() { FirstName = "liufei", LastName = "Sky" });

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

Collection.Add(new Person() { FirstName = "liufei1", LastName =

"Sky" });
Collection.Add(new Person() { FirstName = "liufei3", LastName = "Sky" });//多条插入集合
db.InsertAll(Collection);

//更新语句

SQLiteCommand cmd = db.CreateCommand("update person set FirstName='lisa'whereFirstName='liufei'");

cmd.ExecuteNonQuery();

//单行删除操作
db.Delete(new Person() { ID = 1 });

//多行删除db.DeleteAll();

//查询所有数据绑定到 UI

List list = db.Query(new TableMapping (typeof(Person)), "select * fromPerson");

lt.ItemsSource = list;//lt 变量是需要绑定数据的 ListView 控件

PS:
如果该目录下没有数据库,执行连接语句的时候会自动创建一个数据库;

  • �  如果是已经有的数据库也可以直接复制进 Assets 里,该路径一样可用;

  • �  如果是复制进 Assets 目录下的数据库,需要更改文件属性中,生成操作为“内容”,见下图:

    4.2 ListView 滚动加载

    4.2.1 发现问题在网络获取内容的时候,移动应用都需要实现一个懒加载(懒加载就是在滑动到底部的时候自动加

    载),这样用户体验会好很多。4.2.2 解决问题

      通过上述问题,所以产生了本节内容。
    

    本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

我们要先了解一个知识:就是 Windows8 里边的 ListView 里边已经包含了 ScrollViewer 控件,我们只需要将它从 ListView 里找出来,然后给 ScrollViewer 控件绑定上我们想要关注的事件就可以了。具体操作内容我们应该在绑定在 ScrollViewer 控件的事件里去写。

4.2.2.1 我们如何从 ListView 里找出 ScrollViewer 控件我们可以通过下面这个方法找到 ListView 中的 ScrollViewer 控件

public static T FindVisualChild(DependencyObject element) where T : class{

T result=null;
var count = VisualTreeHelper.GetChildrenCount(element);for (int i = 0; i < count; i++)
{

DependencyObject item = VisualTreeHelper.GetChild(element,i);if (item is T)
{ return item as T; }
result = FindVisualChild(item);

if (result is T){

return result;}

}

return null;}

参数为我们要查找的 ListView
T
为我们要查找的控件类型,该节里应该为 ScrollViewer

4.2.2.2 如何绑定控件的相关事件我们首先要获取控件的试图状态,绑定它的试图状态,方法如下:

//获取到 ScollViewer 中的视图状态
VisualStateGroup visualStatieGroup = FindVisualState(element, "ScrollingIndicatorStates");//注册视图状态更改事件
visualStatieGroup.CurrentStateChanged += new VisualStateChangedEventHandler(laster_CurrentStateChanged);

FindVisualState 方法如下:
public static VisualStateGroup FindVisualState(FrameworkElement element, string name)

{
if (element == null) return null;
IList groups = VisualStateManager.GetVisualStateGroups (element);

foreach (VisualStateGroup group in groups){

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

if (group.Name == name)return group;

}

return null;}

4.2.2.3 在绑定的事件里如何处理我们想要的效果
private async void laster_CurrentStateChanged(object sender,VisualStateChangedEventArgs e)

{
//_currentListView = ((ListView)sender).Name;
var visualState = e.NewState.Name;//获取当前滚动位置
double scrollHeight = _scrollViewer1.ExtentHeight;

var v1 = _scrollViewer1.ExtentHeight - _scrollViewer1.VerticalOffset;

var v2 = _scrollViewer1.ViewportHeight * 1.6;//这个位置 1.6 是可以自己改的,这里只是不想让他到底部的时候才加载,所以设置它离底端一段距离就已经开始加载了

if (v1 < v2 && _loading==false){

_loading = true;//你需要做的事情

_loading = false;}

}

4.2.2.4 作者是怎么操作的
在页面加载的时候注册
listview scrollViewer 绑定
protected override void LoadState(Object navigationParameter, Dictionary pageState){

     registerScroll(itemListView);

}

private void registerScroll(ListView listView){

if (_isHookedScrollEvents) return;
_isHookedScrollEvents = true; //判断是否已经注册过

ScrollViewer _scrollViewer = new ScrollViewer();_scrollViewer = FindVisualChild(listView);

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

if (_scrollViewer != null){

FrameworkElement element = VisualTreeHelper.GetChild(_scrollViewer,0) asFrameworkElement;

if (element != null){

//获取到 ScollViewer 中的视图状态

VisualStateGroup visualStatieGroup = FindVisualState(element,"ScrollingIndicatorStates");

//注册视图状态更改事件

visualStatieGroup.CurrentStateChanged += newVisualStateChangedEventHandler(laster_CurrentStateChanged);

}}

_isHookedScrollEvents = false;}

Ps:相关函数在上文已经都提到了

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

【eoe 特刊】Windows 8 第一期

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!

【eoe 特刊】Windows 8 第一期

eoeWindowsPhone 开发者社区责任编辑:果子狸

美术支持:xxy_820109 技术支持:mx_2012

本文档由 eoeWindowsPhone 开发者社区组织策划,整理及发布,版权所有,转载请保留

http://wp.eoe.cn/ 做最棒的 Windows Phone 开发社区!


你可能感兴趣的:(Windows8)