WPF基础学习笔记

server/2025/2/22 15:56:20/

目录

基础知识:

WPF的特点:

WPF的优点

什么是XAML?

布局基础:

样式的应用:

控件模板(ControlTemplate):

数据模板(DataTemplate):

静态资源StaticReSource跟动态资源DynamicResource的区别:

绑定

绑定的类型:

绑定的模式:默认是双向绑定

什么是上下文,DataContext?

什么是通知更改?

什么是命令ICommand?

动画基础:

配置自动查找上下文,也就是配置View和ViewModel的关系

WPF框架之MvvmLight

WPF框架之Prism

Prism区域介绍

Prism模块化介绍

Prism导航功能

Prism对话服务,即打开新窗口功能

Prism事件的发布和订阅

工作单元和仓储:

AutoMapper的作用


基础知识:

WPF的特点:

  • UI与业务分离
  • 数据绑定

WPF的优点

  • 具有良好的面向对象思想) WPF经常利用各种继承关系、多态性、重载等。
  • 需要了解数据绑定。 绑定是WPF的一大亮点。

什么是XAML?

XAML是可扩展应用程序标记语言,是一种基于XML的声明性语言,可用于创建应用程序UI

优势:

  • 将界面设计与逻辑编码分离
  • 标签化的语法,通俗易懂

布局基础:

所有的东西都放在一个Grid里面,Window == winform里面的Form窗体,

样式的应用:

控件模板(ControlTemplate):

用来修饰控件的外观的,可以对控件进行比较复杂的设计。

绑定控件的属性,但只能绑定控件本身带有的属性,

数据模板(DataTemplate):

数据来驱动ui的显示,而不是在业务代码中穿插UI控件的

静态资源StaticReSource跟动态资源DynamicResource的区别:

静态资源在第一次初始化之后就不会改变了,动态资源可以在资源发生改变时候改变。

资源字典:将一些通用的样式之类的放到一个资源字典中,方便重复使用

资源字典的配置:

资源字典的查找:

DataGrid的应用:

绑定

var bind = new Binding();   // 实例化一个新绑定
bind.Source = txb1;		// 设置源
bind.Path = new PropertyPath("Text");	// 设置要绑定的属性
bind.Mode = BindingMode.TwoWay;  	// 设置绑定模式txb2.SetBinding(TextBox.TextProperty, bind);	// 设置绑定

绑定的类型:

  • 控件与控件之间的绑定
  • 控件与属性之间的绑定

绑定的模式:默认是双向绑定

  • 单向绑定
  • 双向绑定
  • 一次绑定

什么是上下文,DataContext?

xaml前端所需要绑定的字段,数据源等,都来自于后端的ViewModel,这个ViewModel就是需要绑定的上下文,不然找不到对应的数据源

什么是通知更改?

前段绑定的字段被重新赋值时,需要通过通知更改去更新前端的值,在属性的set方法中去调用通知更改的方法,传递的参数可以值要修改的属性的名称,也可以为空。

什么是命令ICommand?

WinForm里面的事件驱动模型,当界面跟业务发生改变时,需要改动的地方会比较多。命令就是用来解决这个问题,将UI与业务分离。

命令其实就是定义了某一个操作,写在ViewMode里面,

UI绑定:

ViewModel中创建Command:

自定义的Command:继承自ICommand

带参数的command。参数从输入框中来,绑定方法如下:

动画基础:

引用的命名空间:

wpf中的动画分类:

  • 线性动画
  • 关键帧动画
  • 路径动画

配置自动查找上下文,也就是配置View和ViewModel的关系

一般还是使用代码的方式,但新版本好像默认就是有这个约定的,不用配置也行。

WPF框架之MvvmLight

特点:

  • 轻量级

WPF框架之Prism

配置自动查找ViewModel

Prism区域介绍

在我们的应用程序或者窗体当中去制定某一块区域,并且给它命名,就能在区域管理类中通过名字去查找到这个区域,并将其它页面,或者内容加载到这个区域。

设置区域:

Prism模块化介绍

这个模块指的其实一些类库什么的,其实类似于我在诊所客户端中,利用反射的方式加载不同功能的方法,将功能模块化,并且不在主程序中直接进行添加应用。

Prism中实现模块化的方式:

  • 通过代码的方式
  • 通过配置文件的方式

通过代码的方式:添加引用的方式,再通过重写ConfigureModuleCatalog方法把模块加载进来

缺点是:

  • 不方便,当修改引用的时候要来修改代码

通过批量加载的文件夹中的Module

  1. 首先,要设置一种查找的方式
  2. 然后每个模块都有一些约定的东西,如继承IModule,在这个类里面去写容器服务

Prism导航功能

 导航的上一步,下一步,通过导航日志来实现。

导航日志Journal的获取:

上一步,下一步命令的委托命令的创建与实现

Prism对话服务,即打开新窗口功能

  • 跟打开导航类似,也可以传递参数跟接收返回值

具体实现:

  1. 新窗体对应的ViewModel要继承并IDialogAware接口
  2. 设置窗体的上下文
  3. 在主程序中,编写要传递的参数,以及对回调函数进行处理

Prism事件的发布和订阅

可以有多个发布者,也可以有多个订阅者。

一个简单的string类型的消息事件:继承一个泛型类

发送消息:

订阅和取消订阅:

这个有什么用?

可以实现跨模块的一些消息的发布和订阅。

工作单元和仓储:

用工作单元的目的:为了多个仓储之间共享一个上下文,确保数据一致性。

使用仓储repositoty的目的,为了解耦,相当于封装了一层服务。

AutoMapper的作用

实现了把数据传输层实体映射成数据库实体的功能

完整的教学视频来源:

2.WPF样式基础_哔哩哔哩_bilibili


http://www.ppmy.cn/server/39704.html

相关文章

geotrust dv通配符证书800

Geotrust是成立时间较久的正规CA认证机构,在过去的几十年间颁发了无数的SSL证书,这些SSL证书被各个开发者使用,受到大多数浏览器的信任。而Geotrust旗下的DV通配符证书因其广泛的应用范围受到了用户的青睐。今天就随SSL盾小编了解Geotrust旗下…

前端Vue怎么获取登录的用户名或用户id

一、使用全局状态管理(Vuex)获取登录用户名 创建 Vuex store,并在其中定义一个用于存储用户名的状态。 // store.js import Vue from vue; import Vuex from vuex;Vue.use(Vuex);export default new Vuex.Store({state: {username: , // 存…

DSOX4054A 示波器:500 MHz,4 个模拟通道

DSOX4054A 示波器 500 MHz 4 个模拟通道 100 万波形/秒捕获率 4000 X 系列拥有一系列引以为傲的配置,包括采用了电容触摸屏技术的 12.1 英寸显示屏、InfiniiScan 区域触摸触发、100 万波形/秒捕获率、MegaZoom IV 智能存储器技术和标配分段存储器。 主要特点 —…

android 蓝牙技术 学习记录 二

android 蓝牙连接 关键类 BluetoothDevice--------------------蓝牙设备 BluetoothGattCallback--------------连接回调 BluetoothGatt----------------------gatt 1. public BluetoothGatt connectGatt(Context context, boolean autoConnect, BluetoothGattCallback call…

【计网】TCP中的滑动窗口

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 正文 工作原理如下: 结语 我的其他博客 正文 TCP(传输控制协议)中的滑动窗口是一种用于流量控制和拥…

Python框架Django入门教程

Django 是一个使用 Python 编程语言开发的、免费且开源的 Web 应用框架。它遵循 "DRY(Dont Repeat Yourself)" 原则,旨在简化创建功能丰富的、高效率的 Web 网站。Django 提供了模型-视图-控制器(MVC)架构的…

基于Springboot的家具网站

基于SpringbootVue的家具网站设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商家 家具信息 家居资讯 后台管理 后台首页 用户管理 商家管理 家具类型管理 家具…

05-07 周二 Python使用并行程序取代串行加速运行,样例程序演示

简介 在进行FastBuild优化的时候,需要串行的获取需要的组件的特征,之前是串行进行的,但是由于之前的设计存在问题,因此,总是很低效,主要是如下的原因: 镜像需要先下载,然后检测运行环…