uwp界面自适应与数据绑定

本文档详细介绍了UWP应用中界面自适应、数据绑定的实现过程,包括页面布局、导航、ListView数据绑定及本地图片选择。重点讨论了如何在不同窗口宽度下实现界面自适应,以及ListView在不同宽度下的表现。同时,文章还探讨了页面间数据传递、图片选择绑定的技巧,提供了项目代码和演示视频作为参考。
摘要由CSDN通过智能技术生成

资源

项目代码
项目演示视频

图片展示

功能和要求

界面设计

参考后面的截图,要求用到Grid(RowDefinitions、ColumnDefinitions)、 ScrollViewer、 StackPanel、BottomAppBar、RelativePannel、Image、TextBlock、DatePicker、APPBarButton。
自适应效果:当窗口宽度小于800时,只显示原本在界面左侧的列表部分,底部导航栏只显示Add图标;窗口宽度大于800时显示完整界面。窗口宽度小于600时,列表项中的图片不显示。(第二周验收只要求在界面宽度发生改变时,界面整体始终居中)
两块界面的右侧均需有滚动条。

页面的导航与跳转

点击MainPage底部的“+”按钮,跳转到NewPage;点击NewPage顶部的“←”按钮,跳转回MainPage。而在宽屏显示两块的情况下,点击“+”则无需跳转。窄屏状态下删除或添加后要跳回Mainpage界面。(第二周不要求宽屏情况)

页面内容

列表的每一项包括复选框、图片、文字(标题)。当复选框被勾选时有划掉的横线出现,取消勾选则横线消失。点击某一项,能跳转到详情页或者是宽屏状态下显示在右侧。详情页除了刚才的三个信息还有详情和日期,另有一个调节图片大小的滑块和两个按钮。

增删改

点击底部“+”或宽屏状态点击create新建,新建时检查Title、Description是否为空,DueDate是否正确(是否大于等于当前日期)。如果不正确,弹出对话框,显示错误信息。
在详情页点击update按钮可以修改信息。
新建中点击Cancel按钮,Title、Description置空,DueDate置为当前日期;修改中点击Cancel按钮,Title、Description、DueDate还原该清单项的详情数据。
选中一个清单项,点击底部删除图标可以删除该项。

主要解决问题

  • 项目的误区
  • 页面不同宽度自适应
  • ListView数据绑定
  • 不同页面跳转传值
  • 本地文件的图片选择以及绑定

项目的误区

确定newpage和mainpage的关系,在宽屏的时候不是newpage和mainpage合成了一个新的page,而是mainpage自身就是一个复杂的页面,既包含mainpage原本的内容,也要加入newpage那一部分,所以newpage和mainpage中的newpage那一部分不是同一个部分。

页面不同宽度自适应

这个本来可以在blend for visual studio中点击就可以完成,但是不推荐这种方法,一般来说blend for visual studio提供的功能没有代码多。第二因为涉及到listview所以与一般的自适应有些许不同,mainpage左边的部分是listView部分,是与右边分开的,如果VisualStateManager是在mainpage外面写的,则会造成,listView内部的图片查不到,明明已经写了但是是查不到的,可能有用UserControl解决的方法,但是我没有试出来。如果是在listView内部写VisualStateManager,那么又控制不到mainpage右边的部分,所以最好的方法是两个都写,一个在listView外面,一个在listView里面。

在ListView外面写入如下代码,当宽度大于800时,grid2也就是右边页面可见

<VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="VisualStateGroup">
                <VisualState x:Name="VisualState800">
                    <VisualState.Setters>
                        <Setter Target="grid2.(UIElement.Visibility)" Value="Visible"/>
                    </VisualState.Setters>
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="800"/>
                    </VisualState.StateTriggers>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

在listView里面写入如下代码,当宽度在600和800之间,使得图片可见

<VisualStateManager.VisualStateGroups>
       <VisualStateGroup x:Name="VisualStateGroup">
              <VisualState x:Name="VisualState600">
                   <VisualState.Setters>
                         <Setter Target="Image.(UIElement.Visibility)" Value="Visible"/>
                    </VisualState.Setters>
                 <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="600"/>
                </VisualState.StateTriggers>
              </VisualState>
      </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

ListView数据绑定

文件结构

文件结构
首先要新建文件夹Models,在里面新建c#文件ListItem.cs,再新建文件夹ViewModels,在里面新建c#文件ListItemViewModels.cs。项目采用mvvm模式,ListItem.cs主要是申明数据结构,ListItemViewModels.cs是ListItem这个类实例的集合,用来删除,更新,新建操作。

ListItem.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using Windows.UI.Xaml.Media.Imaging;

namespace first_project.Models
{
    public class ListItem : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public string id;

        public string title { get; set; }

        <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值