# wpf **Repository Path**: zxjlxc/wpf ## Basic Information - **Project Name**: wpf - **Description**: wpf记录,刘铁猛视频学习记录 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-07-12 - **Last Updated**: 2024-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、概述 WPF学习记录 # 二、内容 ## (一)WPF项目模板 ![](./README/hellowpf.PNG) 程序分为(output type输出类型):应用程序、控制台、类库。 xaml声明性语言,一个标签一个对象。 Properties是 资源文件的描述。 引用是引用的各种类库等。 两对文件,xaml文件会被编译为类的一部分和名称相同的类合并。 ## (二)在XAML中为对象属性赋值 ### 1、Attribute=Value ![](./README/hellowpf2.PNG) 下面这个涉及到把字符串值转换为其他类型的解决办法 ![](./README/happyWPF.PNG) ### 2、属性标签 ![](./README/tagWPF.PNG) ![](./README/tagWPF2.PNG) 从TagWPF2项目可以看出使用属性标签进行赋值会使程序变长,优化建议①可以使用Attribute=Value的要使用②如果是默认值就不写出来。下面是优化后的。 ![](./README/tagWPF3.PNG) ### 3、标签扩展 ![](./README/tagExtendWPF.PNG) ![](./README/tagExtendWPF2.PNG) ## (三)事件处理器 ![](./README/eventWPF.PNG) ## (四)WPF用户控件库 模块化开发,就是把程序做成程序集,可以在不同的项目中引用。 ControlLibraryWPF项目就是一个程序集,命名空间ControlLibraryWPF里有一个SalaryCalculator类。可以把编译好的ControlLibraryWPF.dll在其他项目中引用,然后使用。 ![](./README/controlLibraryWPF.PNG) 项目ReferencesWPF是一个应用程序,这个应用程序先引入上一个程序集(ControlLibraryWPF.dll),然后在项目中调用4次程序集中的画布。 ![](./README/ReferencesWPF.PNG) ## (五)XAML的注释 使用,xaml语言的注释不允许嵌套。 vs的快捷方式是Ctrl+K+C和Ctrl+K+U。 ## (六)XAML中x命名空间中常用的元素 x:Class="AppWpf.MyWpf"是指这个xaml编译成为类时类的名称,并且会和相同类名的类合并。 x:ClassModifier="internal"是指访问修饰符,就是public、private、internal等。 x:Name=""一是为xaml生成的实例创建引用变量,二是实例如果有Name属性则用变量的名称为Name属性赋值,三是把这个Name注册到wpf的结构树里面。 x:FieldModifier="private"是成员变量的访问级别。 ![](./README/nameSpaceWPF.PNG) ![](./README/fieldModifierWPF.PNG) # 三、MVVM ## (一)不用MVVM时 ![](./README/addWPF.PNG) 假如客户需求变更,界面发生改变,则界面和后台逻辑代码都要改变。 如下图 ![](./README/addWPF2.PNG) ## (二)使用MVVM时 ### ①第一次时的界面 ![](./README/mvvm0.PNG) a.双向的数据属性(这个项目中有两个输入数据的,一个计算后显示的数据) ![](./README/mvvm1.PNG) b.单向的命令属性(这个项目中的两个按钮的两个命令,都是单方向 V --> VM) ![](./README/mvvm1b.PNG) ### ②第二次时的界面 ![](./README/mvvm2.PNG) 第二次时只改变了界面的代码,后台逻辑代码一点都没有变。 ![](./README/mvvm2b.PNG) # 四、mvvm模式的一个案例 安装依赖Prism.Wpf ![](./README/MvvmPrism.PNG) 项目运行截图如下,其中DataGrid中的每一行数据都绑定了DishMenu ![](./README/MvvmPrism1.PNG) 小选中框和Order按钮绑定对象是寻找的范围不一样 ![](./README/MvvmPrism2.PNG) DishMenu是一个VM,它包含在MainWindowViewModel这个VM里面,而两个命令属性都在主VM里面,所以小选择框绑定命令比较麻烦。 ![](./README/MvvmPrism3.PNG)