WPF项目实战视频《三》(主要为客户端软件界面设计)

20.WPF项目实战(项目介绍)

1.WEB API:接口,如何获取数据(增删改查)
2.客户端 项目功能:
待办,备忘录,汇总,完成比例,设置系统主题等。

21.WPF项目实战(创建项目结构)

VS使用prism插件新建一个项目MyToDo
在这里插入图片描述

此插件自动安装依赖包Prism.DryIoc,还需安装材料包MaterialDesignThemes,安装之后打开项目UML,按它的文档操作一遍
在这里插入图片描述
在App.xaml.cs中使主程序继承自PrismApplication
在这里插入图片描述
在App.xaml中添加MaterialDesignThemes包的部分(可直接从文档中复制过来)
在这里插入图片描述
在MainWindow.xaml中新加一个按钮
在这里插入图片描述
下一步添加一个Web Api:在解决方案中新建项目-api项目,命名为MyToDo.Api
在这里插入图片描述
设为启动项可正常启动。
在这里插入图片描述

22.WPF项目实战(设计首页导航条)

实现效果:
在这里插入图片描述
先把整个页面分为两个区域(导航条和主要区域)

<Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/>
</Grid.RowDefinitions>

左边的部分:可以直接从MaterialDesignThemes源码中取出这部分到MyToDo项目中:MaterialDesignThemes中找到启动项的mainWindow,复制需要的部分,导入MaterialDesignThemes,
在这里插入图片描述
删掉复制内容中不需要的部分,最后实现:
在这里插入图片描述

现需要加入导航条右边的部分,三个按钮和放大缩小处理。
在这里插入图片描述
新加头像,在项目文件中新建文件夹Images,添加想要的图片,然后在xaml中添加图片即可

<Image Width="25" Height="25" Source="/Images/1.jpg"/>

注意:需要将图片属性设置为资源,否则可能会出错
在这里插入图片描述
注意:插件:XamlStyler.Extension.Windows.VS2022.vsix 安装后直接保存可进行代码的自动对齐。

之前的缩小窗口,放大窗口,关闭窗口,未实现功能,因为此功能本身没有什么多联系,所以可以使用事件来完成。
在这里插入图片描述

public MainWindow()
{InitializeComponent();btnMin.Click += (s, e) =>{//把当前窗口的状态改成最小this.WindowState = WindowState.Minimized;};btnMax.Click += (s, e) =>{//判断当前窗口状态,如果是最大化则变为正常的,否则把当前窗口的状态改成最大if(this.WindowState == WindowState.Maximized)this.WindowState = WindowState.Normal;elsethis.WindowState = WindowState.Maximized;};btnClose.Click += (s, e) =>{//关闭当前窗口this.Close();};
}

还可以添加鼠标事件:拖动和鼠标双击处理。
鼠标拖动控件:为需要拖动的控件增加name
在这里插入图片描述

//添加鼠标拖动事件
ColorZone.MouseMove += (s, e) => { //判断,如果是正在移动,则拖动窗口if(e.LeftButton == MouseButtonState.Pressed){this.DragMove();}
};//双击的处理
ColorZone.MouseDoubleClick += (s, e) =>
{if (this.WindowState == WindowState.Normal)this.WindowState = WindowState.Maximized;elsethis.WindowState = WindowState.Normal;
};

23.WPF项目实战(绑定菜单)

实现点击旁边的菜单栏,可根据选项动态进行切换界面,动态绑定菜单。有图标,名字,命名空间(用来导航)
创建公共的文件夹,创建一些实体类
1.添加一个系统导航菜单类MenuBar:(包含icon图标,title名字,命名控件nameSpace)
在这里插入图片描述
2.在view文件夹中新加窗口:MainView.xaml,在ViewModels新加类:MainViewModels类。

在MainViewModels类中可使用之前创建的MenuBar类,类函数添加导航每个选项的内容。

在主页面:xaml左边的代码中找到对应的需要添加的内容,头像/选项栏/数据模板,数据模板用list绑定MenuBars,界面相关位置绑定MainViewModels中的Icon,Title数据。

使用MainView而不是之前的MainWindowViewModel,在App中的窗口设置修改一下

MainView中需要导入prism,设置上下文实现自动绑定

运行之后,发现选中之后的样式类型可以优化,在app.xaml中增加样式,添加触发器,如果是选中的状态则更改样式,边框大小,边框颜色等(可使用MD中的动态变换颜色)

在MainView.xaml中引用app.xaml中增加样式

再改变选中的颜色和背景颜色:app.xaml中修改对应样式的Border

24.WPF项目实战(菜单导航)

在上一节实现了菜单的界面,这届实现导航的功能。
1.添加所有的子页面。View文件夹中,新添加用户控件IndexView.xaml,MemoView.xaml,SettingsView.xaml,ToDoView.xaml。

2.在ViewModels文件夹中,添加对应的ViewModels类:IndexViewModel.cs,MemoViewModel.cs,SettingsViewModel.cs,ToDoViewModels.cs。

3.加完之后在App.xaml.cs中添加依赖注入,注册为导航

4.实现导航的功能:在MainViewModel.cs中加入命令 DelegateCommand

5.在MainView.xaml中多注册一个区域(新建Extensions文件夹,中新建一个类PrismManager.cs管理区域信息)

6.注册之后就可以在MainViewModel中进行使用了。regionManager

7.导航中上一步下一步切换的功能,使用导航中的回调函数(导航日志,区域导航)

25.WPF项目实战(设计首页)

子页面的样式
显示主页四个图片,手动点击按钮添加代办,手动点击按钮添加备忘录

修改IndexView.xaml,修改样式

(另外:.cs中的快捷键:propfull 然后自动生成变量代码)

26.WPF项目实战(设计首页2)

子页面的样式设计完之后内容填充。

修改IndexView.xaml.cs ,修改实现,列表的绑定,显示所有待办事项。

27.WPF项目实战(设计待办事项界面)

新增待办事项按钮
新增之后显示待办事项

28.WPF项目实战(设计备忘录界面)

新增备忘录按钮
新增之后显示备忘录

29.WPF项目实战(设置界面)

个性化
系统设置
关于更多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs与npm版本对应表

Node.js — Node.js 版本 (nodejs.org)

MMCV1.6.0之Runner/Hook/EMAHook (模型 ema)

mmcv/mmcv/runner/hooks/ema.py EMAHook 类是一个用于在训练过程中对模型参数应用指数移动平均 (EMA) 的钩子。EMA是一种平滑技术&#xff0c;通过在每次迭代中更新模型参数的移动平均值&#xff0c;来减小参数更新的波动性。此钩子在 EvalHook 和 CheckpointSaverHook 之前执…

Postman中的灰度发布测试:API部署的稳健之路

Postman中的灰度发布测试&#xff1a;API部署的稳健之路 在软件开发中&#xff0c;灰度发布是一种渐进式的部署策略&#xff0c;它允许新版本的软件逐步向用户推出&#xff0c;从而降低新版本可能带来的风险。Postman作为一个强大的API开发和测试工具&#xff0c;提供了多种功…

Springboot集成微信公众号模板通知java

先看效果 1、微信模板消息官方文档 微信公众平台 2、申请微信公众平台接口测试账号 微信公众平台 3、创建3个实体 &#xff08;1&#xff09;、ConfigBean import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configurat…

python中,jsonpath提取数据的时候出现TypeError: ‘bool‘ object is not subscriptable怎么解决

json格式如下&#xff1a; { success: True, result: { codeInfo: { code: 0, msg: 成功 }, uploadToken: { resId: rzJRpo, endpoint: https://sit-api-ypsx-resource.ypsx-internal.com/r…

stm32入门-----DMA直接存储器存取(上——理论篇)

目录 前言 DMA 1.简介 2.存储器映像 3.DMA结构 4.数据宽度与对齐 5.DMA工作示例 前言 本期我们就开始学习DMA直接存储器存取&#xff0c;DMA是一个数据装运的小助手&#xff0c;执行数据的搬运处理&#xff0c;减少了CPU的负担&#xff0c;在stm32中担当重要的工作。在前…

pypi如何上传自己的代码记录

目录 一. 注册pypi账号并创建token 1. 注册pypi账号并创建token 2. Pypi账号注册 3. 邮箱验证 ​编辑 4. 重新生成恢复代码 5. 输入账号密码 ​编辑 6. 保存code并继续 ​编辑7. 输入一行即可&#xff0c;然后点击verify 8. 点击左方目录内的account setting&#xff…

基于微信小程序的高校排课系统 /基于微信小程序的排课管理系统/课程管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

7月29日,每日信息差

第一、淘宝天猫计划全面优化运费险策略&#xff0c;与合作伙伴进行多轮磋商&#xff0c;部分新政策有望在今年 9 月试运行。策略调整后&#xff0c;商家将获得更多运费险补贴&#xff0c;降低经营成本 第二、三星电子与全国三星电子工会将于 7 月 29 日下午展开为期三天的薪资…

爱快路由的dns强制客户端代理真是个强大的功能

大致情况是这样的&#xff1a;同事说在linux服务器/etc/resolv.conf上随便写个IP地址【不在线的】&#xff0c;dns地址也能解析&#xff0c;让我帮忙查查。 我看了下也感觉纳闷&#xff0c;试了下不光在服务器上&#xff0c;我本地的pc随便设置了个dns解析也是一样的。 通过wir…

密码错误springboot也正常启动了

1 项目背景 在日常开发中&#xff0c;开发有时候拿不到数据库&#xff0c;依赖组件的密码&#xff0c;例如由devops进行配置&#xff0c;甚至放到一些密码管理组件中。这样就会出现密码错误的情况。项目发布成功&#xff0c;那么依赖项例如Mysql, 访问别的系统的ak, sk真的准备…

解决Qt6 error: The kit needs to define a CMake tool to parse this project.

cmake对于Qt6来说很重要&#xff0c;所以学会cmake是必须的。 上述错误&#xff0c;就是我在Windows10下运行cmake项目总是报错的一个问题。 明明路径已经配好了&#xff0c;却总是报错。 具体原因可能和cmake的版本&#xff0c;以及是否设置为默认有关。另外也和QtCreator中…

飞凌全志T527开发板实现局域网内文件传输功能

之前玩开发板的时候&#xff0c;如果需要实现主机与开发板之间的文件传输&#xff0c;通常是通过挂载NFS的方式&#xff0c;而飞凌的OKT527板载WIFI&#xff0c;并且官方提供的镜像中已经将其成功驱动&#xff0c;那我们就可以通过WIFI连接家中的路由器的方式&#xff0c;实现局…

codeforce(2024年7月29日)B

我的代码 ai比然与bi和bi-1的的二进制含有1的相同&#xff08;有一同一&#xff09; #include <bits/stdc.h>using namespace std; typedef long long ll; typedef double db; typedef long double ldb; typedef pair<int, int> pii; typedef pair<ll, ll>…

redis优化 持久化

redis缓存中间件 nginx web服务器 缓存数据库 php 转发动态请求 tomcat 即是web页面也可以转发动态请求 springboot 自带tomcat redis也是一个数据库&#xff0c;不单单是一个缓存工具。 redis 非关系型数据库 nosql not only sql 不仅仅是sql。 键值对形式 ky value …

【Redis】Centos7 安装 redis(详细教程)

查看当前 Redis 版本&#xff1a; 当前的 redis 版本太老了&#xff0c;选择安装 Redis5。 一、使用 yum 安装 1、首先安装 scl 源 yum install centos-release-scl-rh 由于我之前已经安装过了&#xff0c;所以加载速度比较快&#xff0c;且显示已经安装成功&#xff0c;是最…

MongoDB整合SpringBoot

文章目录 SpringBoot整合MongoDB环境准备文档操作相关注解创建实体添加文档查询文档更新文档删除文档 小技巧&#xff1a;如何去掉_class属性 SpringBoot整合MongoDB https://docs.spring.io/spring-boot/docs/current/reference/html/data.html#data.nosql.mongodb.repositor…

prompt技巧(2) - 如何解决对话过程中角色反转问题

在一些角色扮演场景下&#xff0c;需要大模型扮演某个角色进行对话&#xff0c;但是在对话过程中偶尔会发生角色反转问题&#xff0c;如大模型扮演客户角色与销售人员进行对话&#xff0c;大模型有时会忘记自己身份&#xff0c;突然以销售人员的身份进行回答&#xff0c;这种情…

Postman中API测试的艺术:测试用例复用的高级技巧

Postman中API测试的艺术&#xff1a;测试用例复用的高级技巧 在API测试过程中&#xff0c;复用测试用例可以显著提高测试效率和一致性。Postman作为一个强大的API开发工具&#xff0c;提供了多种机制来实现测试用例的复用。本文将深入探讨Postman中API测试用例复用的技巧&…

开源一个react路由缓存库

Github仓库 背景 产品希望可以像浏览器那样每打开一个路由&#xff0c;会多一个tab&#xff0c;用户可以切换tab访问之前加载过的页面&#xff0c;且不会重新加载。真就产品一句话…… Github上有轮子了吗 Github上开箱即用的轮子是基于react-router-dom V5实现的&#xff…