WPF开发登录窗口之——窗口布局

e29d2dce5b4286847d2571217af622c5.png

WPF开发者QQ群: 340500857  | 微信群 -> 进入公众号主页 加入组织

f65a655ebe2cc352b4d0ed2084cab386.png 

01

代码如下

一、创建项目,命名为LoginWindow,然后创建以下目录结构:

53c5e05318ff42799a088c79d1df7d37.png

二、导入图片

8198704276b9a789582b1c2ae2bb060a.png

三、创建资源字典。一共创建四个:ButtonStyle、WindowStyle、

TextBoxStyle、PasswordBoxStyle:

73ef8ccf5cc9b79eda8a4ac2bc2aecef.png

四、引用资源。打开“App.xaml”,添加资源引用:

<Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><!-- 按钮样式 --><ResourceDictionary Source="CustomStyle/ButtonStyle.xaml"/><!-- 窗口样式 --><ResourceDictionary Source="CustomStyle/WindowStyle.xaml"/><!-- 文本框样式 --><ResourceDictionary Source="CustomStyle/TextBoxStyle.xaml"/><!-- 密码框样式 --><ResourceDictionary Source="CustomStyle/PasswordBoxStyle.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary>
</Application.Resources>

五、添加按钮样式本项目只需要两个按钮样式:关闭按钮与登录/注册按钮。打开“ButtonStyle.xaml”,添加以下样式:

<!-- 关闭按钮 -->
<Style x:Key="CloseButtonStyle" TargetType="Button"><Setter Property="Opacity" Value="0.5"/><Setter Property="Cursor" Value="Hand"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border Name="Border" Background="Transparent"><Canvas Width="10" Height="10" ClipToBounds="True"><Line x:Name="Line01" Stroke="White" X1="0" Y1="0" X2="10" Y2="10"/><Line x:Name="Line02" Stroke="White" X1="10" Y1="0" X2="0" Y2="10"/></Canvas></Border><!-- 触发器 --><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Opacity" Value="0.75"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter Property="Opacity" Value="1"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style>
<!-- 登录/注册按钮 -->
<Style TargetType="Button"><Setter Property="Foreground" Value="White"/><Setter Property="Cursor" Value="Hand"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border x:Name="Border" Background="#4370F5"><ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/></Border><!-- 触发器 --><ControlTemplate.Triggers><!-- 鼠标悬停时 --><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="Border" Property="Background" Value="#5B84FE"/></Trigger><!-- 鼠标按下时 --><Trigger Property="IsPressed" Value="True"><Setter TargetName="Border" Property="Background" Value="#3761DF"/></Trigger><!-- 禁用时 --><Trigger Property="IsEnabled" Value="False"><Setter Property="Opacity" Value="0.3"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter>
</Style>

六、添加窗口样式打开“WindowStyle.xaml”,添加以下样式:

<Style x:Key="NormalWindow" TargetType="Window"><Setter Property="Background" Value="#80222324"/><Setter Property="FontFamily" Value="NSimSun"/><Setter Property="FontSize" Value="12"/><Setter Property="TextOptions.TextFormattingMode" Value="Display"/><Setter Property="SnapsToDevicePixels" Value="True"/><Setter Property="WindowChrome.WindowChrome"><Setter.Value><WindowChrome GlassFrameThickness="1" UseAeroCaptionButtons="False" ResizeBorderThickness="0" CaptionHeight="100" CornerRadius="0"/></Setter.Value></Setter><!-- 模板 --><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Window"><!-- 外观 --><Grid><!-- 分区 --><Grid.RowDefinitions><!-- 标题栏 --><RowDefinition Height="100"/><!-- 客户区 --><RowDefinition /></Grid.RowDefinitions><!-- 第一块:标题栏 --><Grid><!-- 背景色 --><Grid Height="200" VerticalAlignment="Center" Opacity="0.9"><Grid.Background><LinearGradientBrush StartPoint="0,0" EndPoint="1,1"><GradientStop Offset="0" Color="#4370F5"/><GradientStop Offset="1" Color="#AE088D"/></LinearGradientBrush></Grid.Background></Grid><!-- 背景图 --><Image Source="Image/Background.png" Width="360" VerticalAlignment="Bottom"/><!-- 标识 --><Image Source="Image/Logo.png" Width="114" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,20,0,0"/><!-- 关闭按钮 --><Button x:Name="CloseButton" Width="30" Height="30" HorizontalAlignment="Right" VerticalAlignment="Top"Style="{StaticResource CloseButtonStyle}" WindowChrome.IsHitTestVisibleInChrome="True"/></Grid><!-- 第二块:客户区 --><Grid Grid.Row="1" Background="White"><AdornerDecorator><ContentPresenter/></AdornerDecorator></Grid></Grid></ControlTemplate></Setter.Value></Setter>
</Style>

七、这个模板结构很简单,就是普通的上下结构,唯一需要解释的布局是“背景色”,标题栏高度是100,背景色的高度是200,且垂直居中,这种布局的效果如下图:

14c2e7ab53978b6c08f2067731333241.png

渐变上下部分都被裁剪掉了

八、应用窗口样式打开“MainWindow.xaml”,设置以下属性:

<Window x:Class="LoginWindow.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:LoginWindow"mc:Ignorable="d"Title="登录" Height="372" Width="360" ResizeMode="NoResize"FontFamily="NSimSun" FontSize="13px" WindowStartupLocation="CenterScreen"Style="{StaticResource NormalWindow}"><Grid></Grid>
</Window>

4c4a5b6c07d6877666a25edded7d3a8d.png

源码地址如下

http://www.gjiang.club/article?ID=6157079391ee9e52232fddcf

github:https://github.com/yanjinhuagood/WPFDevelopers.git

gitee:https://gitee.com/yanjinhua/WPFDevelopers.git

WPF开发者QQ群: 340500857 

blogs: https://www.cnblogs.com/yanjinhua

Github:https://github.com/yanjinhuagood

出处:https://www.cnblogs.com/yanjinhua

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请著名作者 出处 https://github.com/yanjinhuagood

5d24c589a24af779a7c9efd0896cb1be.png

扫一扫关注我们,

52e0977dedf87afaabcbab1e2b90fa6d.gif

更多技能早知道!

a083bc3cb597f0cd7a57bf417dcb863a.gif

点击阅读原文可跳转至源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这个偏僻的小山村竟出了12位博士28位硕士,高产“学霸”背后原因曝光......

全世界只有3.14 % 的人关注了爆炸吧知识考上大学留名祖宗祠堂今早&#xff0c;超模君刷微博的时候&#xff0c;有一则新闻吓得我虎躯一震——一个总共才2000多人小山村&#xff0c;竟然出了12位博士28位硕士。而且考上大学的孩子&#xff0c;他们的名字直接刻进祖宗祠堂。(微博…

牛顿新定律:凭本事得到的,凭什么要还?

后记事后&#xff0c;超模君提出用上帝开过光的真苹果来换回自己的苹果手机&#xff0c;但是惨遭牛顿君拒绝&#xff0c;理由是苹果手机更能激发他的创作灵感……面对这种鬼话&#xff0c;超模君敢怒不敢言。更惨的是&#xff0c;上帝说苹果手机不报销……艾萨克牛顿&#xff0…

04Prism WPF 入门实战 - Module

1.概要源码及PPT地址&#xff1a;https://github.com/JusterZhu/wemail视频地址&#xff1a;https://www.bilibili.com/video/BV1KQ4y1C7tg?sharesourcecopywebModule&#xff0c;具有特定功能&#xff0c;且独立存在则称为成为模块。下图为Prism体系中的关系结构图。在Prism体…

虚拟机(VMware Workstation)中,把连接网络的模式由“NAT模式”,改成“自动桥接模式”,网速大大的提升...

安装虚拟机&#xff0c;默认情况下&#xff0c;联网的模式是NAT&#xff0c;即跟主机是转发共用网络资源的&#xff0c;这样就非常慢&#xff0c;时常网页都打不开&#xff0c;现把它改成桥接模式&#xff0c;让它独立成为一台物理机&#xff0c;网速有大大的改善&#xff0c;设…

如何保持纯洁男女关系……

1 倒也没毛病▼2 差点以为是狗子&#xff01;&#xff01;▼3 大哥&#xff1a;我裤子没破&#xff01;▼4 女朋友梦到了啥&#xff1f;&#xff1f;▼5 忍不住了&#xff0c;嘻嘻嘻...&#xff08;via.小风车车&#xff09;▼6 亲爸爸&#xff01;&#xff01;▼7 哈哈哈…

【转】一个关于fork()的笔试题,考了好几遍,终于找到答案了

笔试至少3次见到这个题&#xff0c;都是瞎编的&#xff0c;今天群里有人问&#xff0c;然后有人放出了这个地址&#xff1a;http://coolshell.cn/articles/7965.html&#xff0c;让我恍然大明白&#xff0c;豁然好脾气。 感谢这位陈皓同学&#xff08;名字很熟&#xff0c;不记…

C# 选中 DataGridView 控件中的行时显示不同的颜色

可以利用 DataGridView 控件的 SelectionMode、ReadOnly 和 SelectionBackColor 属性实现当选中DataGridView控件中的行时显示不同的颜色。SelectionMode属性用于设置如何选择 DataGridView 的单元格。语法如下:public DataGridViewSelectionMode SelectionMode{get;set;}属性值…

32岁武汉硕士毕业4年后重新高考,考上本硕需再读8年:“不是一时冲动”

全世界只有3.14 % 的人关注了爆炸吧知识9月5日&#xff0c;程传坤收到了湖北中医药大学的录取通知书。7月8日下午5时10分&#xff0c;32岁的程传坤走出湖北省武汉市新洲一中考点&#xff0c;一脸轻松&#xff0c;拿着准考证特意在新洲一中门前留影。这是他硕士毕业4年后再战高考…

打开本地文件_可以跨软件搜索文件?结构式检索你一定要学会!

面对电脑中日积月累的大量结构式&#xff0c;如何能快速找到自己想要的文件&#xff0c;有时真是一个让人头疼的问题。KingDraw PC版内置的结构式检索功能&#xff0c;可以帮助我们轻松解决这个难题。KingDraw PC版中&#xff0c;我们有两种途径可以检索结构式——右键菜单中检…

WPF实现雷达图(仿英雄联盟)

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织转载 有小伙伴提出需要实现雷达图。 由于在WPF中没有现成的雷达图控件&#xff0c;所以我们自己实现一个。PS&#xff1a;有更好的方式欢迎推荐。01—代码如…

python3 2.00gb怎么去掉单位_最值得期待的Python 3.9的新功能

Python 3.9 beta预计下个月就要发布了&#xff0c;那么3.9有那些让我们期待的新功能和变更呢&#xff1f;本我我们一起来说Python 3.9的新功能的。安装测试版为了能够实际探索Python 3.9 的功能&#xff0c;我们需要先下载一个Python 3.9 alpha/beta并安装。wget https://www.p…

这6部超经典的物理电影,居然还有人没有看过?

全世界只有3.14 % 的人关注了爆炸吧知识开篇警告&#xff1a;这是一篇福利文&#xff01;今天小编给热爱物理及数学的小伙伴们&#xff0c;分享6部豆瓣评分8分以上&#xff0c;与数学和物理领域相关的经典电影&#xff0c;帮助大家在工作、学习之余劳逸结合。这些影片除了涉及数…

产品说,我只需要一个有亿点复杂的查询界面

有的时候&#xff0c;你需要动态构建一个比较复杂的查询条件&#xff0c;传入数据库中进行查询。而条件本身可能来自前端请求或者配置文件。那么这个时候&#xff0c;表达式树&#xff0c;就可以帮助到你。本文我们将通过几个简短的示例来了解如何完成这些操作。你也可能接到过…

PostgreSQL忘记输入where条件update更新整张表的解决办法

2019独角兽企业重金招聘Python工程师标准>>> 虽然出现这个错误很挫&#xff0c;但有时候还是会被你或者你的同事碰到。为了避免这个错误&#xff0c;PostgreSQL数据库中可以通过触发器来解决&#xff0c;这里用的是plpgsql 。 1、修改postgresql.conf配置 增加&…

视觉开发需要什么程度的数学_角度的概念在视觉上非常直观,但其数学定义并不是那么简单...

角的概念是几何学中最基本的概念之一。当我们研究三角形的性质时&#xff0c;我们自然地建立了三角形的边和角之间的联系。这些联系是在三角学中系统地建立起来的。角是什么&#xff1f;我们如何测量它&#xff1f;虽然角度的概念在视觉上很直观&#xff0c;但它的数学定义却不…

别薅了别薅了!!!再薅就真的被薅秃了!!

▲ 点击查看大家好&#xff0c;超模全新的固定栏目「薅羊毛」上线了&#xff01;既然是薅羊毛&#xff0c;怎么能空着手来&#xff1f;毕竟好用的好吃的&#xff0c;啥都要花钱。与其为那些虚幻的包装价值买单&#xff0c;不如跟着超模君狠狠地薅一把羊毛&#xff0c;「花小钱赚…

GitHub Universe 2021|MS Reactor 邀你共聚年度盛会

关注我们GitHub Universe 2021 将于2021年10月27-28日&#xff08;PDT&#xff09;在线直播&#xff0c;MS Reactor 将与 CSDN 合作进行转播&#xff0c;与你一同观看这场全球开发者盛会。 关于 GitHub UniverseGitHub Universe 是 GitHub 面向全球开发者社区举办的年度重要盛会…

C#中的多线程 - 并行编程 z

原文&#xff1a;http://www.albahari.com/threading/part5.aspx 专题&#xff1a;C#中的多线程 1并行编程Permalink 在这一部分&#xff0c;我们讨论 Framework 4.0 加入的多线程 API&#xff0c;它们可以充分利用多核处理器。 并行 LINQ&#xff08;Parallel LINQ&#xff09…

java数组深拷贝和浅拷贝_java中的深拷贝与浅拷贝(值类型 vs 引用类型)

对象赋值赋值是日常编程过程中最常见的操作&#xff0c;最简单的比如&#xff1a;Student codeSheep new Student(); Student codePig codeSheep;严格来说&#xff0c;这种不能算是对象拷贝&#xff0c;因为拷贝的仅仅只是引用关系&#xff0c;并没有生成新的实际对象&#x…

各大厂抢招WPF,小米这回是下了血本啊...

九银十进入尾声&#xff0c;小米又爆出高薪岗位&#xff1a;35k左右&#xff0c;14薪&#xff0c;招5年左右.NET&#xff0c;要求WPF和自动化( 职位&#xff1a;https://app.mokahr.com/apply/xiaomi/287/#/job/523278c0-c504-4cdc-bb88-28c1b101ac76)。今年招WPF的大厂太多了&…