WPF的前世今生
1、WPF的布局
WPF的布局分为相对定位和绝对定位两种。
绝对定位一般用Canvas
相对定位一般用Grid、StackPanel、DockPanel、WrapPanel
2、MVVM模式是什么
MVVM就是Model View ViewModel
Model层就是数据层,你可以把它理解成实体层,一般情况下,只要不和服务端挂钩或者小型项目,写一个实体类就行了,和服务端挂钩,或者大型项目加入了DTO,小项目返回原生对象就行了,它此时是有状态的,要和数据库挂钩,比如你用到SqlSugar,你这个实体类就不能单独的继承BindableBase了
View就是视图,你写的Xaml文件用来展示前端界面的,还有就是你对绑定、事件的声明
ViewModel层就是业务处理的,用来处理你前面View的所有声明,通常也会监听View层,比如ViewModel层更新,View层更新
优点就是降低代码耦合,提高重用性
3、Xaml文件
一般情况下,你可以使用Xaml文件来写WPF的前端页面(但是不一定,后文提到)
Xaml文件,你可以理解为Xml文件的扩展,
通常,我们Xml文件是这样书写的
<object>
<Animal>
<Cat></Cat>
</Animal>
</object>
在Xaml文件中格式也是一样的。
<Window
x:Class="WPFSample.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:WPFSample.Controls"
xmlns:views="clr-namespace:WPFSample.Views"
Title="How to create a WPF"
Width="500"
Height="500">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
</Grid>
</Window>
在我们普通的书写代码中,不管是java还是C#,或者是Python,
他们的.cs、.java 、.py文件上方是
using xxx;
import xxx;
这个using和import就在Xaml文件中使用xmlns表示。
我在写详细一点
你的MainViewModel要应用一个Student类
那么你可以这样书写
using WPFSample;
using WPFSample.Student;
public class MainViewModel
{
private Student Stus{get;set;}
}
那么在Xaml文件中你可以这样做
<Window x:class="WPFSample"
xmlns:stu="WPFSample.Student">
</Window>
stu是随便取得名字,方便在下面使用
现在我们来编写一个简单的页面
如果你了解Html或者一点Vue,那么你就能更好的理解了,不了解没关系,我可以详细的为你解答
1、你首先使用VS创建一个WPF的程序,并且你运行了它,它打开后是一个弹窗,差不多和一个QQ的登录界面一样大小。
2、你可以写一个Button控件,并且描述了它的长宽,以及它的内容
<Button Width="200" Height="25" Content="按钮"/>
3、运行代码,你可以发现,弹窗中有了按钮
4、现在你想复刻QQ的界面
你这样写了
<TextBlick Text="登录"/>
<TextBox Width="200"/>
<Button Width="80"/>
你发现错落有致,没有达到你想要的效果
那么,就要用到WPF的布局了
<Grid Margin="100,50,100,50">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="30"
Text="{Binding appData.SystemName}" />
<StackPanel Grid.Row="1" Orientation="Horizontal">
<TextBlock
Width="60"
Margin="50,0,0,0"
VerticalAlignment="Center"
FontSize="18"
Text="用户名:" />
<TextBox
Width="200"
Margin="10,0,0,0"
VerticalAlignment="Center"
mah:TextBoxHelper.Watermark="请输入用户名"
mah:TextBoxHelper.ClearTextButton="True"
Text="{Binding appData.CurrentUser.Name}" />
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal">
<TextBlock
Width="60"
Margin="50,0,0,0"
VerticalAlignment="Center"
FontSize="18"
Text="密码:" />
<PasswordBox
Width="200"
Margin="10,0,0,0"
VerticalAlignment="Center"
mah:TextBoxHelper.ClearTextButton="True"
mah:TextBoxHelper.Watermark="请输入密码"
converter:PasswordBoxHelper.Attach="True"
converter:PasswordBoxHelper.Password="{Binding appData.CurrentUser.Password,Mode=TwoWay}" />
<!--<TextBox
Width="200"
Margin="10,0,0,0"
VerticalAlignment="Center"
Text="{Binding appData.CurrentUser.Password}" />-->
</StackPanel>
<StackPanel
Grid.Row="3"
Margin="40,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal">
<Button
Width="80"
Command="{Binding LoginCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=mah:MetroWindow}}"
Content="登录"
IsDefault="True" />
<Button
Width="80"
Margin="40,0,0,0"
Command="{Binding CancelCommand}"
Content="取消"
IsCancel="True" />
</StackPanel>
</Grid>
我现在讲解一下,这段简单的代码,你把Grid当作一个框,一间房,
你知道Row是英文行、排的意思,那么
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
这段代码就是把你刚才打开的弹窗分成了4层
程序中是从0开始的,不是1,
所以你的第一行写了TextBlock。
WPF的前世今生的更多相关文章
- WPF 基础到企业应用系列2——WPF前世今生
1.开篇前言 非常多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要.WPF作为一项新技术(已经三年多了.或者应该叫老技术了).我们都有必要了解它的来龙去脉,尤其是公司的CT ...
- 【WPF】影城POS的前世今生
前言 POS从16年底开始设计到现在都过去快两年了,这里我做一个简单的回顾. 技术选型 NativeUI:性能最高,开发难度最大,代表产品QQ和微信,没有基因没有技术栈. Electron+H5:不支 ...
- WPF基础到企业应用系列6——布局全接触
本文转自:http://knightswarrior.blog.51cto.com/1792698/365351 一. 摘要 首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows ...
- WPF 基础到企业应用系列索引
转自:http://www.cnblogs.com/zenghongliang/archive/2010/07/09/1774141.html WPF 基础到企业应用系列索引 WPF 基础到企业应用系 ...
- WPF导学目录
很早就知道WPF这个东西,做项目中没用到,也就没去整理学习.作为winForm的升级版,未来windows桌面应用程序的趋势,有些公司招聘需求中也会提到熟悉WPF,于是就整理学习了一下WPF. 主要参 ...
- 在WPF中使用依赖注入的方式创建视图
在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
- MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息
MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...
- MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信
MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
随机推荐
- 2022-07-07:原本数组中都是大于0、小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的。 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量:
2022-07-07:原本数组中都是大于0.小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的. 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量: ...
- 2020-01-04:mysql里的innodb引擎的数据结构,你有看过吗?
福哥答案2020-01-04: 面试官刚开始问我看过mysql源码没,然后问了这个问题.回答B+树,过不了面试官那关.答案来自<MySQL技术内幕 InnoDB存储引擎 第2版>第四章,时 ...
- 2021-10-19:缺失的区间。给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。力扣163。
2021-10-19:缺失的区间.给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间.力扣163. 福大大 答案2021-1 ...
- vue全家桶进阶之路42:Vue3 SCSS、SASS、CSS
SCSS和SASS都是CSS预处理器,它们的主要目的是简化CSS的编写,增加可维护性,并提供更丰富的功能.下面是它们与普通的CSS的区别: 语法:SCSS和SASS都具有比普通CSS更丰富的语法.其中 ...
- sql server 删除带依赖的列 由于一个或多个对象访问此 列
--SELECT * FROM LJEL005H--ALTER TABLE LJEL005H add el_req int default 15 not null --消息 5074,级别 16,状态 ...
- flutter系列之:使用AnimationController来控制动画效果
目录 简介 构建一个要动画的widget 让图像动起来 总结 简介 之前我们提到了flutter提供了比较简单好用的AnimatedContainer和SlideTransition来进行一些简单的动 ...
- django:有关移除数据库出错问题
执行: 最终,通过执行迁移文件,我们将Django项目中创建的模型转化为MySql中的数据表. 执行迁移文件的两条命令: python manage.py makemigrations python ...
- Python爬虫————泉州二手房数据爬取和数据可视化
1.选题的背景 我本次的主题是泉州二手房房价的调查分析. 首先通过爬虫采集链家网上所有二手房的房源数据,并对采集到的数据进行清洗:然后,对清洗后的数据进行可视化分析,探索隐藏在大量数据背后的规律:将这 ...
- jenkins 发版获取镜像仓库中tag
一.安装阿里云linux客户端工具 选择官网下载地址 # wget wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tg ...
- 4. DI相关内容
我们先来思考 向一个类中传递数据的方式有几种? 普通方法(set 方法) 构造方法 依赖注入描述了在容器中建立 bean 与 bean 之间的依赖关系的过程,如果 bean 运行需要的是数字或字符串呢 ...