WPF框架系列课程(小白进阶选择)

赵颜
• 阅读 154

WPF框架系列课程(小白进阶选择)

本文将从零基础开始讲解WPF控件、数据绑定、模板样式、资源字典、命令系统、依赖属性、路由事件、动画行为等一系列的知识,内容包含WPF的数据绑定、MVVM概念与实操、样式、模板、命令、依赖属性、路由事件、行为、自定义控件、3D、动画等高级知识,想学习wpf的小伙伴可以认真阅读本文,希望我的文章对大家有所帮助。

首先,我们先来认识wpf,那么什么是wpf呢? WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。

谈到WPF的开发,就不能不说到MVVM,一说到MVVM,就会提及MVC、MVP等概念,那么这样一关联下来就会产生很多概念,到最后就很容易变成以概念来阐述概念,最终的结果可想而知,大家可能会一头雾水、不知所云,所以我用“漫谈WPF开发”这个小标题来阐述一下我对WPF开发的理解,当然只是自己对这些技术的总结和经验,错误之处在所难免,也希望大家能够谅解!

从2007年接触WPF和Silverlight以来,也做过一些项目了,对他们也有一些自己的理解,当然在开发这些项目的过程中也在使用其他的一些技术做项目,比如WinForm、ASP.NET(ASP.NET MVC一个项目没做完就被终止)等等,感觉不论是采用什么技术,最基本的东西都不会变,比如对数据库和文件的访问、对日志和异常的处理、对报表的展现、对打印的实现、对性能的提升、对用户的友好等等。

Windows Presentation Foundation (WPF) 是一个演示框架,可用于开发以下类型的应用程序: 独立应用程序(传统风格的 Windows 应用程序,这些应用程序作为要安装到客户端计算机并从客户端计算机运行的可执行程序集来生成)。 XAML 浏览器应用程序 (XBAP)(由导航页组成的应用程序,这些应用程序作为可执行程序集生成并由 Microsoft Internet Explorer 或 Mozilla Firefox 等 Web 浏览器托管)。 自定义控件库(包含可重用控件的非可执行程序集)。 类库(包含可重用类的非可执行程序集)。

窗口和对话框 用户通过窗口与 WPF 独立应用程序交互。 窗口旨在托管应用程序内容并提供通常允许用户与内容交互的应用程序功能。 在 WPF 中,通过 Window 类封装窗口,该类支持: 创建和显示窗口。 建立所有者/所拥有窗口关系。 配置窗口外观(例如,大小、位置、图标、标题栏文本、边框)。 对窗口的生存期进行跟踪并与之进行交互。

添加Module类,并实现Prism.Modularity.IModule接口,实现接口的模块,视为可以被Prism发现并加载的模块。以DefectListModule模块为例: namespace DemoPrism.First{ public class FirstModule : IModule { public void OnInitialized(IContainerProvider containerProvider) { IRegionManager regionManager = containerProvider.Resolve(); regionManager.RegisterViewWithRegion("FirstRegion", typeof(Views.FirstView)); } public void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterForNavigation<Views.FirstView, ViewModels.FirstViewModel>(); } }}

新建用户。同样,给用户定义一个主键,然后我们在本地创建这个用户 // 3. 添加用户 var adminUserId = "90184155-dee0-40c9-bb1e-b5ed07afc04e"; ApplicationUser adminUser = new ApplicationUser { Id = adminUserId, UserName = "admin@fakexiecheng.com", NormalizedUserName = "admin@fakexiecheng.com".ToUpper(), Email = "admin@fakexiecheng.com", NormalizedEmail = "admin@fakexiecheng.com".ToUpper(), TwoFactorEnabled = false, EmailConfirmed = true, PhoneNumber = "123456789", PhoneNumberConfirmed = false }; 首先,去数据库获得旅游路线的详细数据。这里做一个判断,如果touristRoute 不存在,touristRoute ==null, 我们需要返回响应404 接下来,给购物车创建lineitem 最后,把旅游路线当前的价格复制出来, // 3 创建lineItem var touristRoute = await _touristRouteRepository .GetTouristRouteAsync(addShoppingCartItemDto.TouristRouteId); if(touristRoute == null) { return NotFound("旅游路线不存在"); }

var lineItem = new LineItem() { TouristRouteId = addShoppingCartItemDto.TouristRouteId, ShoppingCartId = shoppingCart.Id, OriginalPrice = touristRoute.OriginalPrice, DiscountPresent = touristRoute.DiscountPresent }; 接下来,我们还需要使用automapper处理model与dto的自动映射。在Profile文件夹创建一个新profile文件,文件命名OrderProfile。class继承automapper的Profile,然后在构建函数中加入model到dto的映射关系。 [HttpPost("checkout")] [Authorize(AuthenticationSchemes = "Bearer")] public async Task Checkout() { // 1 获得当前用户 var userId = _httpContextAccessor .HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

// 2 使用userid获得购物车
var shoppingCart = await _touristRouteRepository.GetShoppingCartByUserId(userId);

// 3 创建订单
var order = new Order()
{
    Id = Guid.NewGuid(),
    UserId = userId,
    State = OrderStateEnum.Pending,
    OrderItems = shoppingCart.ShoppingCartItems,
    CreateDateUTC = DateTime.UtcNow,
};

shoppingCart.ShoppingCartItems = null;

// 4 保存数据
await _touristRouteRepository.AddOrderAsync(order);
await _touristRouteRepository.SaveAsync();

// 5 return
return Ok(_mapper.Map<OrderDto>(order));

} 全部链接添加完毕,我们就要可以返回响应了,响应数据就是links列表。现在,用户就可以通过访问这个api的根目录获得api的使用方法了。 [Route("api")] [ApiController] public class RootController: ControllerBase { [HttpGet(Name = "GetRoot")] public IActionResult GetRoot() { var links = new List();

    // 自我链接
    links.Add(
        new LinkDto(
            Url.Link("GetRoot", null),
            "self",
            "GET"
        ));

    // 一级链接 旅游路线 “GET api/touristRoutes”
    links.Add(
        new LinkDto(
            Url.Link("GetTouristRoutes", null),
            "get_tourist_routes",
            "GET"
        ));

    // 一级链接 旅游路线 “POST api/touristRoutes”
    links.Add(
        new LinkDto(
            Url.Link("CreateTouristRoute", null),
点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
3年前
uni-app入门教程(3)数据绑定、样式绑定和事件处理
@toc前言本文的内容主要包含3部分:声明并渲染变量,包括条件渲染;通过class和style定义样式并动态绑定;事件的绑定,包含了事件传参。三部分均具有动态绑定的特性。一、模板语法及数据绑定1.声明和渲染变量在使用变量前,需要先声明,一般在data块中进行声明,如hellouniapp项目中index.vue中定义的title变
Wesley13 Wesley13
2年前
Spread Studio中文支持图解
SpreadStudiofor.NET是一个跨平台的Spread表格控件工具集,支持WindowsForms,ASP.NET,WPF,WinRT以及Silverlight平台。新的产品套包中包含全新的SpreadforWindowsForms,SpreadforASP.NET,SpreadforWPFSilverlight以及
Stella981 Stella981
2年前
Bootstrap WPF Style,Bootstrap风格的WPF样式
原文:BootstrapWPFStyle,Bootstrap风格的WPF样式(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Ftsliwei%2Fp%2F6138412.html)简介GitHub地址:https://githu
Easter79 Easter79
2年前
TE二次开发:在wpf上自定义气泡
在TE的CS开发中,可以使用winform或者wpf进行开发,使用的语言都是C,wpf的开发中,可以实现在winform中不能实现的浮动半透明效果,参见本公众号的《wpf的windowsformhost上浮动控件方法(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fmp.weixin.q
笑面虎 笑面虎
3个月前
WPF高级实战课程《知产代理数字化解决方案》
WPF高级实战课程《知产代理数字化解决方案》给大家分享一套课程——WPF高级实战课程《知产代理数字化解决方案》,附源码下载。WPF(WindowsPresentationFoundation)是一个面向Windows客户端的应用程序框架,它的出现极大提升了
何婆子 何婆子
2个月前
C#速成指南:从入门到进阶,实战WPF与Unity3D开发
C速成指南:从入门到进阶,实战WPF与Unity3D开发download》chaoxingit.com/1983/当你学习C并准备实战WPF(WindowsPresentationFoundation)和Unity3D开发时,你可以按照以下步骤进行学习。这
金旋 金旋
2个月前
朝夕教育-WPF数据采集与监控系统开发实战
//下仔のke:https://yeziit.cn/13607/WPF(WindowsPresentationFoundation)是微软公司推出的一种用于创建Windows桌面应用程序的用户界面框架。WPF提供了丰富的界面控件,并且支持数据绑定和样式定义
笑面虎 笑面虎
5个月前
WPF框架系列课程(小白进阶选择)-WPF视频教程2023
WPF框架系列课程(小白进阶选择)WPF视频教程2023今天给大家讲解一下关于WPF的知识内容,希望对大家在学习wpf的过程中遇到的问题有所帮助,以下是参考资料下载:1、什么是WPFWPF(WindowsPresentationFoundation)是用于
荀勗 荀勗
5个月前
WPF框架系列课程(小白进阶选择)
WPF主要编程模型通过托管代码公开。在WPF的早期设计阶段,曾有过大量关于如何界定系统的托管组件和非托管组件的争论。CLR提供一系列的功能,可以提高开发效率和可靠性(包括内存管理、错误处理和通用类型系统等),但这是需要付出代价的。PresentationF
赵嬷嬷 赵嬷嬷
3个月前
WPF高级实战课程《知产代理数字化解决方案》
学习地址1:https://pan.baidu.com/s/1J0cDIHK8T49QABEimK9UA提取码:ypzr学习地址2:https://share.weiyun.com/7RUYskT6密码:adbvfp一、什么是WPF?WPF是微软新一代图形