前言:笔者最近用c#写WPF做了一个项目,此前未曾做过完整的WPF项目,算是一边学一边用,网上搜了不少资料,效率当然是不敢恭维的,有时会在一些很简单的问题上纠结很长时间,血与泪的教训可不少。
不过,正如电视剧某榜里的一句话:既然我活了下来,就不会白白活着!笔者怎么也算挣扎过了,有些经验与教训可以分享,趁着记忆深刻总结写下来。希望后来者少走弯路,提高工作效率。如果有写得不好的地方,希望读者能够指正,一起进步!

今天先从登录窗口说起:

  1. 效果图
    先来看看效果图,简洁,风格统一,完全不会被Window操作系统主题的影响。

  2. 实现方法
    WPF做这样的窗口非常简单,只有需在窗口设计中设置两个属性,一个是AllowsTransparency, 设置为 Ture; 一个是 WindowStyle, 设置为 None。

注:是Window的属性,不要选中其他的控件。

另外,如果AllowsTransparency=“True”,那么 WindowStyle只能为 None, VS2015 已经做到连动设置,只要勾选AllowsTransparency,后一个也跟着变了。但 VS2008 还是需要用户分别设置,不然会报错。

还有一个问题不得不提,AllowsTransparency=“True” 之后就无法使用 WindowsFormsHost控件了,因为就算用了,WFH里的任何控件也是透明无法显示出来的,比如ReportViewer!

3.窗口任意空白地方实现鼠标拖拽
标题栏上有最大化最小化和关闭的按钮,其中在登录窗口我们一般是不会使用最大化按钮的。可是不得不说,标题栏还有一个很实用的作用,就是可以拖拽整个窗口,用户只要单击标题栏不放,就可以拖到桌面的任何地方。如今把标题栏隐藏之后,该如何弥补呢?

为窗口添加一个 MouseLeftButtonDown 的事件,代码如下:

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){try{this.DragMove();}catch { }}

这样就OK了!

注:网上有些示例里,没有用 try{}catch{},而只有一行代码

this.DragMove();

如果在登录窗口,只有那么几个控件和事件的话,应该也是无大碍的。

在这里笔者有个小小的经验必须分享一下:

由于在主界面里也使用了这种无标题栏的窗口,鼠标在Gridview上操作时,经常会引发异常崩溃。

所以笔者认为最好加 try…catch… 避免异常,哪怕是登录窗口也不例外。

  1. 输入密码后按回车登录
    很多网站会注意这种情况,输入密码后回车,系统就可以登录,这就是良好的用户体验。(当然,也有些网站不注意用户体验,用户必须用鼠标去点击登录的)

其实在密码框添加一个 KeyDown 事件就可以

private void txt_Pwd_KeyDown(object sender, KeyEventArgs e){switch (e.Key){case Key.Enter:btn_login_Click(btn_login, null);break;default:break;}}

So easy !

  1. 按Enter(回车)跳到下一控件
    提到回车登录,顺便提一下,有些人不喜欢输入用户名后,又要用鼠标移到密码框,又键盘又鼠标,比如笔者。

事实上 Tab键 可以让用户在比较简单的界面摆脱鼠标,不过要注意在窗口设计时调好控件的 TabIndex 顺序。

当然在此基础上也可以加一个 Enter 设置的功能,只要在后台代码重写窗口的 OnKeyDown 事件,如下:

//按下回车后跳入下一个控件protected override void OnKeyDown(KeyEventArgs e){if (e.Key == Key.Enter){// MoveFocus takes a TraveralReqest as its argument.TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);// Gets the element with keyboard focus.UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;// Change keyboard focus.if (elementWithFocus != null){elementWithFocus.MoveFocus(request);}e.Handled = true;}base.OnKeyDown(e);}
  1. 运行时打开登录窗口
    登录窗口毕竟不是主窗口,登录后要关闭的,所以Startup的路径不是登录窗口,但登录的时候是不能打开主窗口的,如果用户关闭登录窗口,退出程序。

实现方法:

项目下有一个App.xaml文件,Startup 指向主窗口的路径,然后打开后台代码 App.xaml.cs,重写OnStartup事件,判断一下登录窗口的 DialogResult 如果返回ture,就正常打开主窗口,如果为 false,则关闭整个程序。代码:

//打开登录窗口,成功后进入主窗口protected override void OnStartup(StartupEventArgs e){try{OneInstanceOnly();//仅运行一个实例
//#if !DEBUG// 运行登录窗口Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;LoginWindow window = new LoginWindow();bool? dialogResult = window.ShowDialog();if (Utils.IsTrue(dialogResult)){base.OnStartup(e);Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;}else{this.Shutdown();}
//#endif}catch (Exception ex){UIUtils.ShowException(ex);}}

留意 ShutdownMode 的变化

作者:沐汐 Vicky
出处:http://www.cnblogs.com/EasyInvoice

以上就是C# WPF 建立无边框(标题栏)的登录c#教程窗口的示例的详细内容

C# WPF 建立无边框(标题栏)的登录窗口的示例相关推荐

  1. C# WPF 建立无边框(标题栏)的登录窗口

    前言:笔者最近用c#写WPF做了一个项目,此前未曾做过完整的WPF项目,算是一边学一边用,网上搜了不少资料,效率当然是不敢恭维的,有时会在一些很简单的问题上纠结很长时间,血与泪的教训可不少. 不过,正 ...

  2. WPF 创建无边框的圆角窗口

    第一步:去掉窗体默认样式的边框 首先将窗体的背景设为透明,将允许透明的属性设置为True,即:Background="Transparent"  AllowsTransparenc ...

  3. wpf button无边框_中国式新房无玄关?客厅真不缺这点面积!

    来源|合肥飞墨设计 id:feimoshejihf 以前经常会说一些奇葩户型改造,现在的新房奇葩的户型渐渐少了,但是还是不可避免的有一些小问题,比如入户门正对卫生间,入户无玄关等不痛不痒的问题,虽说不 ...

  4. 利用WPF建立自适应窗口大小布局的WinForm窗口

    编写WinForm程序时,都会碰到一个问题.就是WinForm窗口在不同分辨率下的大小问题.举例说明,你编写的WinForm窗口在1024×768下是合适.匀称的.不过,如果用户的计算机的分辨率为14 ...

  5. 拖动无边框的登入窗口

    最初使用一个Rectangle,并设置Z值来捕捉MouseLeftButtonDown事件,但是不管在它之上或是之下的TextBox都无法用鼠标进入编辑状态. 给Window添加MouseLeftBu ...

  6. qt widget设置边框_Qt开源作品16-通用无边框拖动拉伸

    ## 一.前言 相信各位CS结构开发的程序员,多多少少都遇到过需要美化界面的事情,一般都不会采用系统的标题栏,这样就需要无边框标题栏窗体,默认的话无边框的标题栏都不支持拉伸和拖动的,毕竟去掉了标题栏则 ...

  7. html制作网易云音乐登录系统,JavaScript实现[网易云音乐Web站登录窗口]拖拽功能...

    说明 你可能发现有很多网站他们的登录窗口或者说是登录框是可以拖动的, 更有甚者他们的站点提示框都可以拖动, 你也许可能会对这个功能的实现感兴趣, 那么这篇文章可能会对你有所帮助!具体的网站示例以 网易 ...

  8. 无边框窗体的移动(winform/wpf)

    WinForm 引入命名空间 using System.Runtime.InteropServices;无边框移动[DllImport("user32.dll")]public s ...

  9. WPF无边框拖动、全屏、缩放

    原文:WPF无边框拖动.全屏.缩放 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/lwwl12/article/details/78059361 先看效果 ...

最新文章

  1. 浅谈Java/Android下的注解
  2. C++关键字速查手册
  3. iPhone 12主板曝光:布局更紧凑 满满苹果基因
  4. Go、Java 和 Rust 的比较
  5. NYOJ243 - 交换输出
  6. j2me怎么运行java_Eclipse开发J2ME环境安装及配置
  7. 硬件描述语言实验二:一位全加器实验
  8. android支付宝运动修改器,支付宝运动修改器
  9. java代码实现端口是否ping通
  10. 动手学深度学习(四十三)——机器翻译及其数据构建
  11. JZOJ.5289【NOIP2017模拟8.17】偷笑
  12. MathType 运行时错误‘53’:文件未找到:MathPage.WLL
  13. 三分钟搞明白Java内存分布,再也不怕了!!!
  14. html转换pdf java_java转pdf(html转为pdf)
  15. 孤单还是对你最好的惩罚
  16. python做学生管理系统数据库模型_数据库建模:学生信息系统搭建实验
  17. 51单片机 YF-S201水流量检测传感器的使用
  18. 单卡3090可得专属ChatGPT:使用LoRA+ChatGLM
  19. iPhone开发之SQLite 实现中文排序的教程
  20. 使用PyTorch Geometric构建自己的图数据集

热门文章

  1. 解决YOLOv5算法中的中文标签显示问题
  2. 开发笔记-内表指针赋值
  3. Discuz论坛升级攻略及踩坑处理
  4. win10系统sqlserver2000数据库问题
  5. php图片翻转,php识别翻转iphone拍摄的颠倒图片
  6. 微信小程序开发数据缓存基础知识辨析以及运用实例
  7. UVA10142/PC110108Australian Voting
  8. excel去除重复处理
  9. SRAM电路工作原理
  10. 为什么建议选英文技术书籍