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;他们的名字直接刻进祖宗祠堂。(微博…

Android应用程序消息处理机制(Looper、Handler)分析(5)

ActivityThread类的这个mH成员变量是什么时候创建的呢&#xff1f;我们前面在分析应用程序的消息循环时&#xff0c;说到当应用程序进程启动之后&#xff0c;就会加载ActivityThread类的main函数里面&#xff0c;在这个main函数里面&#xff0c;在通过Looper类进入消息循环之前…

现在银行etl还要做拉链表吗_hive 拉链表 实现全量数据 增量更新

背景&#xff1a;数据表字段有IP&#xff0c;IP省份&#xff0c;IP城市&#xff0c;最新访问时间&#xff0c;假如目前一共有100W的IP我第一次初始化的时候完成初始化表插入&#xff0c;然后每天都有5W左右的IP活跃&#xff0c;然后我要更新这5W个IP的记录到初始化的表&#xf…

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

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

NOI导刊模拟2—电话网络 解题报告

题目大意&#xff1a;给出一个图&#xff0c;顶点为1到n和一个值k&#xff0c;求出包含顶点1到顶点n的通路的子图中&#xff0c;第k1大的边最短为多少&#xff1f;&#xff08;若存在一条从1到n路径边数小于等于k&#xff0c;则返回0&#xff0c;若不存在通路&#xff0c;返回-…

好书推荐 -《国富论》-15-09

好书推荐-《国富论》-15-09.md—/Users/zjh/Documents书籍 《国富论》-亚当斯密-陕西师范大学出版社 推荐理由 《国》是一本非常通俗易懂的经济书籍&#xff0c;用简单的语言讲解从个体&#xff0c;到小型市场&#xff0c;再到国家和政府的经济结构和规律。虽然亚当斯密的一些观…

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;不记…

android自定义金额输入键盘_Android 自定义输入支付密码的软键盘实例代码

Android 自定义输入支付密码的软键盘有项目需求需要做一个密码锁功能&#xff0c;还有自己的软键盘&#xff0c;类似与支付宝那种&#xff0c;这里是整理的资料&#xff0c;大家可以看下&#xff0c;如有错误&#xff0c;欢迎留言指正需求&#xff1a;要实现类似支付宝的输入支…

IE6 IE8下背景图片不显示问题

更改background:url()no-repeat; 去掉no-repeat即可解决问题&#xff01;转载于:https://www.cnblogs.com/dream-w/p/4781644.html

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

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

Objective-C( Foundation框架 一 常见的结构体)

常见的结构体 &#xff08;NSPoint&#xff0c;CGPoint&#xff09;、&#xff08;NSRange&#xff0c;CGRange&#xff09;、&#xff08;NSSize&#xff0c;CGSize&#xff09; 苹果官方推荐使用CG开头的结构体 NSRange是Foundation框架中常见的结构体它的定义如下&#xff1…

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;我们有两种途径可以检索结构式——右键菜单中检…

C# static readonly 与 const 的区别

static readonly 与 const 的区别&#xff1a; const 表达式的值是在编译时形成的&#xff1b; static readonly 表达式的值直到程序运行时才形成&#xff1b;转载于:https://www.cnblogs.com/xiangfeideshui/archive/2012/10/15/2724260.html

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

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

Emoji:搜索将与您找到表情符号背后的故事

眼下。秉已经开始支持emoji搜索&#xff0c;这意味着&#xff0c;你可以插入或粘贴系列emoji表情&#xff0c;让我们的爱、微笑、食品等。。些表情随意组合&#xff0c;必应总会带给你非常多有趣的但却没有不论什么实际用途的搜索结果。这是一项非常新鲜的东西&#xff0c;并且…

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…