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的前世今生的更多相关文章

  1. WPF 基础到企业应用系列2——WPF前世今生

    1.开篇前言       非常多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要.WPF作为一项新技术(已经三年多了.或者应该叫老技术了).我们都有必要了解它的来龙去脉,尤其是公司的CT ...

  2. 【WPF】影城POS的前世今生

    前言 POS从16年底开始设计到现在都过去快两年了,这里我做一个简单的回顾. 技术选型 NativeUI:性能最高,开发难度最大,代表产品QQ和微信,没有基因没有技术栈. Electron+H5:不支 ...

  3. WPF基础到企业应用系列6——布局全接触

    本文转自:http://knightswarrior.blog.51cto.com/1792698/365351 一. 摘要 首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows ...

  4. WPF 基础到企业应用系列索引

    转自:http://www.cnblogs.com/zenghongliang/archive/2010/07/09/1774141.html WPF 基础到企业应用系列索引 WPF 基础到企业应用系 ...

  5. WPF导学目录

    很早就知道WPF这个东西,做项目中没用到,也就没去整理学习.作为winForm的升级版,未来windows桌面应用程序的趋势,有些公司招聘需求中也会提到熟悉WPF,于是就整理学习了一下WPF. 主要参 ...

  6. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  7. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  8. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  9. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  10. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

随机推荐

  1. 2022-12-05:部门工资前三高的所有员工。编写一个SQL查询找出每个部门中收入前三高的员工 。 +------------+----------+--------+ | Department |

    2022-12-05:部门工资前三高的所有员工.编写一个SQL查询找出每个部门中收入前三高的员工 . ±-----------±---------±-------+ | Department | Em ...

  2. 2020-09-26:请问rust中的&和c++中的&有哪些区别?

    福哥答案2020-09-26:#福大大架构师每日一题# 变量定义:c++是别名.rust是指针.取地址和按位与,c++和rust是相同的. c++测试代码如下: #include <iostre ...

  3. 2021-11-22:给定一个正数数组arr,表示每个小朋友的得分; 任何两个相邻的小朋友,如果得分一样,怎么分糖果无所谓,但如果得分不一样,分数大的一定要比分数少的多拿一些糖果; 假设所有的小朋友坐

    2021-11-22:给定一个正数数组arr,表示每个小朋友的得分: 任何两个相邻的小朋友,如果得分一样,怎么分糖果无所谓,但如果得分不一样,分数大的一定要比分数少的多拿一些糖果: 假设所有的小朋友坐 ...

  4. 2021-09-07:单词接龙 II。按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -

    2021-09-07:单词接龙 II.按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s ...

  5. exclude查询时出掉或排除某个条件的信息

    exclude查询时出掉或排除某个条件的信息 print(Student.objects.all().exclude(nickname='A')

  6. uni-app 选择原因

    开发者.案例数量更多跨平台能力及扩展灵活性更强性能体验优秀周边生态丰富学习成本低开发成本低

  7. 2013年蓝桥杯C/C++大学B组省赛真题(马虎的算式)

    题目描述: 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了. 有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ?  但结果却很戏剧性,他的答案竟然是 ...

  8. 计算机网络IP地址和进制的转换

    目录 一.双绞线 二.计算机的数制 三.单位 四.IP地址的分类 ip地址的 组成 五.特殊地址 六.地址协议 一.双绞线 T568A:白绿.绿.白橙.蓝.白蓝.橙.白棕.棕 T568B:白橙.橙.白 ...

  9. Oracle Linux切换uek内核到rhck内核解决ACFS兼容问题

    背景:协助客户做验证,客户使用的是RHEL7.6环境,我这边是OEL7.6环境,开始以为区别不大,结果acfs兼容还是遇到问题,特此记录下. 现象:asmca图形没有acfs相关内容,无法使用acfs ...

  10. R 语言柱状图示例笔记

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文章中链接. 一.基础柱状图 1. barplot 命令 基于barplot基础柱状图颜色.方向及分组的绘 ...