Xungerrrr's Blog

UWP - MyList

Word count: 1kReading time: 3 min
2018/03/29 Share

实验步骤

Week 1

  1. 在Visual Studio中新建MyList项目,创建MainPage和NewPage两个空白页面;
  2. 在MainPage中放置CheckBox和Line控件。通过设计勾选CheckBox触发的事件,实现CheckBox和Line的绑定;
  3. 在NewPage中放置TextBox、TextBlock、DatePicker和Button控件,实现一个简单的To-do创建界面。设计Create和Cancel按钮的单击触发事件,实现判断非空、检查日期和清空内容的简单逻辑。

Week 2

  1. 将MainPage和NewPage的主体内容放入ScrollViewer控件中,实现界面的上下滚动功能;
  2. 在ScrollViewer中放入StackPanel控件,实现元素的依次排列;
  3. 利用Grid设计To-do Item的样式,实现对CheckBox、Image、Line和TextBox的定位;
  4. 在NewPage的StackPanel中设置HorizontalAlignment=”Center”,使得界面宽度发生改变时,界面整体始终居中;
  5. 修改页面函数,实现MainPage到NewPage的跳转以及NewPage的返回;
  6. 美化界面,为界面加入Acrylic和Reveal效果,实现了Windows 10新推出的Fluent Design Style,使界面变得极为通透美观。

Week 3

  1. 添加VisualStateGroup,使得窗口宽度小于800时,右侧布局不显示;小于600时,每一个Item的image不显示,实现Adaptive UI;
  2. 根据Adaptive UI,修改页面跳转逻辑;
  3. 采用MVVM设计模式,将Models、Views和ViewModels分开管理。在Models中定义ListItem类,存储Item的信息;在ViewModels里定义ListItemViewModel类,实现对ListItem集合的增删改操作;在Views中,将ListView绑定到ListItemViewModel中的数据源,添加数据模板ListItem,再用{x:Bind}将数据源与控件属性绑定,实现数据绑定功能。

关键步骤截图

图1. 宽度在600到800之间的显示效果:

图2. 宽度小于600的显示效果:

图3. 宽度大于800的显示效果:

图4. NewPage的单独显示效果及标题栏的返回按钮:

亮点与改进

美化界面

设计上,没有采用统一的背景图片,而是加入了很有质感的Acrylic材质和鼠标的Reveal视觉效果,使应用透明化,能够很好地适应不同的背景颜色,更具有现代感和设计感。
注:要实现此效果,必须使用最新版Windows 10 SDK(版本16299)生成解决方案,否则会提示找不到相关资源,无法运行。

选择本地图片功能

添加了选择本地图片的功能,用户可以为每一个To-do Item选择自己喜欢的本地图片,丰富了应用的个性化功能。

自定义应用启动界面和图标

为应用磁贴和启动界面添加了图标和背景色,应用更完善、更美观。

遇到的问题

  • 问题:在美化界面的过程中,尝试将应用标题栏透明化,结果导致标题栏的三个按钮难以看见,影响用户体验。

    解决方案:查阅相关资料后,学习了用代码自定义标题栏的方法,成功解决问题。

  • 问题:在数据绑定的过程中,调用ListItemViewModel的方法时,应用出错。

    解决方案:根据出错信息,发现是应用中没有对ListItemViewModel类进行实例化。在应用启动的时候进行实例化,成功解决问题。

思考与总结

在本次实验中,我做出了我的第一个UWP应用。这是一个简单记录用户待办事项的应用。在应用中,用户可以创建、修改和删除待办事项,记录事项的标题、细节、截止日期和图片信息,并标记事项的完成状态。

在实验中,我学到了许多有趣并且有用的知识,例如xaml、C#语言的基本特性、UWP应用的调试方法等等,很好地锻炼了我的程序设计能力。成功做出应用,也是对努力学习的一种回报,将继续鼓励着我学习UWP开发的基本以及进阶知识。

GitHub

https://github.com/Xungerrrr/SYSU-UWP/tree/master/MyList

参考资料

CATALOG
  1. 1. 实验步骤
    1. 1.1. Week 1
    2. 1.2. Week 2
    3. 1.3. Week 3
  2. 2. 关键步骤截图
  3. 3. 亮点与改进
    1. 3.1. 美化界面
    2. 3.2. 选择本地图片功能
    3. 3.3. 自定义应用启动界面和图标
  4. 4. 遇到的问题
  5. 5. 思考与总结
  6. 6. GitHub
  7. 7. 参考资料