WPF中實現登陸窗口的“記住帳號”功能


 

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(1);
            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"), 5);
                        namesNode = XmlHelper.HandleNodeUnderMaxCount(namesNode, maxCount);// 處理保存賬號的最大數量大於config表中配置的數量
                        doc.Save(filePath);// 保存
                    }
                    else if (nameList != null && nameList.Contains(loginName))// 如果賬號已保存, 將其提到最前。
                    {
                        if (nameList.Count == 1) 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>
View Code

 

效果如圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM