1、在Login.xaml中添加资源:

<XmlDataProvider x:Key="XmlDataProvider" Source="pack://application:,,,/5yue.PMS;Component/Config/SysConfig.xml" XPath="SysConfig"/>

2、使用ComboBox实现帐号输入:

<ComboBox x:Name="UserName" Width="160" Height="26" FontSize="14" IsEditable="True" Grid.Row="1" Grid.Column="1"
ItemsSource="{Binding Source={StaticResource XmlDataProvider}, XPath=SavedLoginNames/LoginName}" BorderThickness ="1" SelectedIndex="0"/>
<CheckBox x:Name="ckSaveName" FontSize="12px" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Right" Margin="0,0,22,0" Padding="2 0 " Foreground="#88052742">记住我</CheckBox>

3、后台逻辑,在提交验证成功后添加保存帐号的步骤即可:

        /// <summary>
/// 保存账号(异步执行)
/// </summary>
/// <param name="loginName"></param>
private async void SaveLoginName(string loginName)
{
await Task.Delay();
if(this.ckSaveName.IsChecked != true) return;
try
{
string filePath = Utils.GetMapPath("")+@"Config\SysConfig.xml";
XmlDocument doc = XmlHelper.GetXMLDoc(filePath);
if (doc != null)
{
XmlNode rootNode = doc.SelectSingleNode("SysConfig");
List<string> nameList = XmlHelper.GetNodesToList(rootNode, "SavedLoginNames");
if (nameList != null && !nameList.Contains(loginName))// 如果账号仍未保存
{
XmlNode namesNode = rootNode.SelectSingleNode("SavedLoginNames");// 获取SavedLoginNames节点信息
XmlNode childNode = doc.CreateElement("LoginName");// 创建新的SavedLoginName节点
childNode.InnerText = loginName;// 节点内容值为loginName参数
namesNode.PrependChild(childNode);// 插入到最前 int maxCount = Utils.StrToInt(CacheProvider.GetSysConfig("SavedLoginNameCount"), );
namesNode = XmlHelper.HandleNodeUnderMaxCount(namesNode, maxCount);// 处理保存账号的最大数量大于config表中配置的数量
doc.Save(filePath);// 保存
}
else if (nameList != null && nameList.Contains(loginName))// 如果账号已保存, 将其提到最前。
{
if (nameList.Count == ) return;
XmlNode namesNode = rootNode.SelectSingleNode("SavedLoginNames");
XmlNodeList childNodes = namesNode.ChildNodes;
foreach (XmlNode item in childNodes)
{
if (loginName.Equals(item.InnerText))
{
XmlNode newNode = item;
namesNode.RemoveChild(item);
namesNode.PrependChild(newNode);
break;
}
}
doc.Save(filePath);// 保存
}
//else if(nameList == null) return "failed,读取配置失败!";
}
//return (int)Message.SUCCESS;
}
catch (Exception ex)
{
//return ex.ToString();
}
}

4、项目根目录/Config下添加SysConfig.xml保存用户名

<?xml version="1.0" encoding="UTF-8"?>
<SysConfig>
<SavedLoginNames><!-- 保存的登录账号 -->
<LoginName>admin</LoginName>
<LoginName>111</LoginName>
<LoginName>555</LoginName>
<LoginName>22</LoginName>
<LoginName>444</LoginName>
</SavedLoginNames>
</SysConfig>

效果如图:

WPF中实现登陆窗口的“记住帐号”功能的更多相关文章

  1. 如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI

    原文:如何监视 WPF 中的所有窗口,在所有窗口中订阅事件或者附加 UI 由于 WPF 路由事件(主要是隧道和冒泡)的存在,我们很容易能够通过只监听窗口中的某些事件使得整个窗口中所有控件发生的事件都被 ...

  2. TortoiseGit bonobo gitserver记住帐号密码

    记住帐号密码有两种方式: 针对服务器存储用户名密码 设置方式为在windows用户存储位置创建文件_netrc,没有后缀名.用文本编辑内容,格式为   machine 115.29.141.162 只 ...

  3. js COOKIE 记住帐号或者uuid

    当开始接到这个任务的时候,我对cookie还是没多少了解的,而uuid的生成也是一无所知.但是当你发现这个网址http://stackoverflow.com/questions/105034/how ...

  4. WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能

    原文:WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能       对于CAD图形来说,3D旋转比较常用,具体实现方法在上篇文章<WPF中3D旋转的实现 >中做了 ...

  5. 【.net 深呼吸】WPF 中的父子窗口

    与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的. 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也 ...

  6. TortoiseGit + msysgit 记住帐号密码方法及使用密匙的方法

    Windows 重度用户只能用 for windows 的软件了,所以虽然使用 Git,但还是要找专门的 windows 版本. 最近开始使用 GitHub 来托管一些小项目/兴趣,而自己是重度 wi ...

  7. java在线聊天项目 客户端登陆窗口LoginDialog的注册用户功能 修改注册逻辑 增空用户名密码的反馈 增加showMessageDialog()提示框

    LoginDialog类的代码修改如下: package com.swift.frame; import java.awt.EventQueue; import java.awt.event.Acti ...

  8. WPF中两个窗口的互斥

    这里所讲的互斥是两个窗口不同时存在,打开一,只显示一:点一相关按钮显示二,关闭一:关闭二,显示一. 窗口一: history winResult winChoice = new winResult() ...

  9. c#中实现登陆窗口(无需隐藏)

    C#登录窗口的实现,特点就是不用隐藏. 在入口处打开登陆: static void Main() { Application.EnableVisualStyles(); Application.Set ...

随机推荐

  1. 无光驱在32位windows系统下安装64位windows系统

    位的系统. 大家都知道,32位的操作系统最多只能支持3.2G的内存,现在内存白菜价,很多人都在原有基础上购入新内存,这样最少也有4G了,为了让内存不浪费,我 们只有升级到64位操作系统.但是很多朋友又 ...

  2. lua 学习 (一 )Mac搭建lua环境和ide

    今天开始学习lua  首先是搭建环境 和 我的hello world 首先 交代一下我用的是 Mac 系统 所以在Mac上安装lua 环境很方便的 lua  Mointain Lion - Lua 5 ...

  3. netty 解决TCP粘包与拆包问题(二)

    TCP以流的方式进行数据传输,上层应用协议为了对消息的区分,采用了以下几种方法. 1.消息固定长度 2.第一篇讲的回车换行符形式 3.以特殊字符作为消息结束符的形式 4.通过消息头中定义长度字段来标识 ...

  4. mysql基础安全

  5. samba

    在/home/下有多个用户目录A.B...,现通过samba共享,要求A用户对A用户组目录具有root权限,对其他目录具有 读权限,B用户对B目录具有root权限,对其他目录只读.并在登陆各个目录时要 ...

  6. PHP之图片上传类(加了缩略图)

    有缩略图功能 但是 感觉不全面,而且有点问题,继续学习,将来以后修改下 <form action="<?php $_SERVER['PHP_SELF']; ?>" ...

  7. Codeforces Round #363 (Div. 2)A-D

    699A 题意:在一根数轴上有n个东西以相同的速率1m/s在运动,给出他们的坐标以及运动方向,问最快发生的碰撞在什么时候 思路:遍历一遍坐标,看那两个相邻的可能相撞,更新ans #include< ...

  8. 关于 OJ1574的参考题解(较麻烦)

    #include <stdio.h>int main(){ long a,b,c,d,e; scanf("%ld",&a); d=a; b=0; while(d ...

  9. 按钮显示PopupWindow,setOutsideTouchable(true)时,点击按钮再次打开的问题

    先给大家看看这个:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9F%A5%E8%AF%86%E5%BA%93/21462.shtml ...

  10. Windows安装Scrapy遇坑解决办

    PS: Windows真心不适合开发.且行且珍惜.... 坑: error: Setup script exited with error: Microsoft Visual C++ 9.0 is r ...