首页 > 其他分享 >Avalonia 创建登录窗体

Avalonia 创建登录窗体

时间:2024-11-18 14:33:13浏览次数:1  
标签:set string 登录 get System 窗体 using public Avalonia

 

登录窗体代码如下,注意这里面使用了图片和图标字体,需要在资源中添加,并且App.axaml,也要添加

<Window xmlns="https://github.com/avaloniaui"  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"
        mc:Ignorable="d" d:DesignWidth="960" d:DesignHeight="650"   x:Class="AvaloniaPlant01.Views.AdminLoginView"
         xmlns:vm="using:AvaloniaPlant01.ViewModels"  x:DataType="vm:AdminLoginViewModel"
         Title="用户登录"  Width="960"  Height="650" WindowStartupLocation="CenterScreen"   Icon="/Assets/avalonia-logo.ico">


    <Grid Margin="0"  Background="Transparent">
        <!-- 首先在窗体中创建Grid面板,然后在Grid中创建两列,并且设置第一列的宽度 -->
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="350" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <StackPanel Grid.Column="0"  Background="Transparent">
            <Grid >
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <!-- 第一行显示 欢迎登录-->
                <Border  Grid.Row="0"  Margin="50,50,50,30" Background="Transparent"
                    Height="100" BorderBrush="#00b0ff" BorderThickness="0,0,0,0" >
                    <TextBlock Margin="0,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center"
                               FontSize="32" Foreground="Black" Text="欢 迎 登 录" />
                </Border>
                <!-- 第二行显示 图片,如果多个图片,通过rientation="Horizontal"改变放置方向 -->
                <StackPanel   Grid.Row="1" HorizontalAlignment="Center"
                    VerticalAlignment="Center" Orientation="Horizontal">
                    <Image
                       Width="96"
                       Margin="0,0,0,0"
                       Source="/Assets/Images/LineIcon.png" />
                </StackPanel>
                <!-- 第三行 输入框  -->
                <StackPanel   Grid.Row="2" HorizontalAlignment="Center" Background="Transparent" Width="350" Margin="0,30,0,0"
                    VerticalAlignment="Center" Orientation="Vertical">
                    <TextBox Margin="0,20,0,0" Name="UserTextBox"   Watermark="输入用户" Width="200"  Height="40"  CornerRadius="5"
                             Text="{Binding currentLoginName}" HorizontalContentAlignment="Center" FontSize="20" />
                    <TextBox Margin="0,20,0,20" Name="PasswordTextBox"  Watermark="输入密码"  PasswordChar="*" Width="200" Height="40"
                             CornerRadius="5"  Text="{Binding currentLoginPwd}" HorizontalContentAlignment="Center" FontSize="20" />
                </StackPanel>
                <!-- 第四行 按钮相关  -->
                <StackPanel   Grid.Row="3" HorizontalAlignment="Center" Background="Transparent" Width="350"
                VerticalAlignment="Center" Orientation="Vertical">
                    <CheckBox    Name="CheckBox1" Content="记住密码" Margin="80,20,0,0" />
                    <Button Name="LoginButton" FontSize="24" FontFamily="{StaticResource iconfont}" Margin="0,2,0,0"  Width="200"  Height="50"
                            Content="&#xe891;  用 户 登 录"  HorizontalAlignment="Stretch"  Background="#007AFF" Foreground="White" CornerRadius="6"
                         HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Command="{Binding BtnCommand}"  CommandParameter="11"  />
                </StackPanel>
            </Grid>
        </StackPanel>

        <Border Grid.Column="1"  Background="Transparent" BorderBrush="#00b0ff" BorderThickness="1,0,0,0">
            <Image
               Width="500"
               Margin="6,0,6,0"
               Source="/Assets/Images/EquipmentLegend.png" />
        </Border>
    </Grid>


</Window>

注意这个cs文件也需要修改一下

 

App.axaml添加资源如下

 

登录窗体的视图模型代码如下

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Input;
using Avalonia.Controls;
using AvaloniaPlant01.Base;
using AvaloniaPlant01.Models;
using AvaloniaPlant01.Views;

namespace AvaloniaPlant01.ViewModels;

public partial class AdminLoginViewModel : ViewModelBase
{
    public string Greeting => "Welcome to Avalonia!";

    private ObservableCollection<SysAdmins> sysAdminsList;
    public ObservableCollection<SysAdmins> SysAdminsList { get; set; }

    public string currentLoginName { get; set; }
    public string currentLoginPwd { get; set; }


    private readonly Window _window;
    public AdminLoginViewModel(Window window)
    {
        SysAdminsList = new ObservableCollection<SysAdmins>()
        {
                new SysAdmins() { LoginID = 1001,LoginName="funiyi1", LoginPwd = "111111", Role =1, LastLogin = "2022/07/19", UIImage = new byte[]{ 0x00} },
                new SysAdmins() { LoginID = 1002,LoginName="funiyi2", LoginPwd = "222222", Role =2, LastLogin = "2022/07/19", UIImage = new byte[]{ 0x00} },
                new SysAdmins() { LoginID = 1003,LoginName="funiyi3", LoginPwd = "333333", Role =3, LastLogin = "2022/07/19", UIImage = new byte[]{ 0x00} },
        };
        currentLoginName = SysAdminsList[0].LoginName;
        currentLoginPwd = SysAdminsList[0].LoginPwd;

        BtnCommand = new Command(DoBtnCommand);
        _window = window;
    }

    /// <summary>
    /// 按钮命令  //========注意每次调用命令时显示调用无效命令 ================
    /// </summary>
    public ICommand BtnCommand { get; set; }

    /// <summary>
    /// 通过委托命令绑定
    /// </summary>
    /// <param name="obj"></param>
    private void DoBtnCommand(object obj)
    {
        //这里需要获取密码资源 和 实际输入的密码比对,正确后才能打开主窗体
        //判断用户和密码 ------

        //打开主窗体,并且关闭登录窗体
        var mainWindow = new MainWindow() { DataContext = new MainViewModel()};
        mainWindow.Show();
        _window.Close();
    }

}

用户实体类代码如下

using Avalonia.Media.Imaging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AvaloniaPlant01.Models
{

    /// <summary>
    /// 用户信息
    /// </summary>
    public class SysAdmins
    {
        /// <summary>
        /// 登录ID
        /// </summary>
        public long LoginID { get; set; }

        /// <summary>
        /// 登录名称
        /// </summary>
        public string LoginName { get; set; }=string.Empty; 

        /// <summary>
        /// 登录密码
        /// </summary>
        public string LoginPwd { get; set; } = string.Empty;

        /// <summary>
        /// 登录角色
        /// </summary>
        public int Role { get; set; }

        /// <summary>
        /// 最后登录日期
        /// </summary>
        public string LastLogin { get; set; } = string.Empty;

        /// <summary>
        /// 用户邮箱
        /// </summary>
        public string LoginMailbox { get; set; } = string.Empty;

        /// <summary>
        /// 显示图片,使用byte[]存取处理
        /// </summary>
        public byte[] UIImage { get; set; }     

    }

}

 

按钮命令公共类 cs文件如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace AvaloniaPlant01.Base
{

    /// <summary>
    /// 命令基类
    /// </summary>
    public class Command : ICommand
    {
        /// <summary>
        /// 定义一个委托对象属性
        /// </summary>
        public Action<object?> ExecuteTask { get; set; }

        /// <summary>
        /// 当出现影响是否应执行该命令的更改时发生,执行命令的时候是否触发事件
        /// </summary>
        public event EventHandler? CanExecuteChanged;

        /// <summary>
        /// 确定当前执行的命令是否可在其当前状态下执行的方法,如果false不执行触发
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public bool CanExecute(object? parameter)
        {
            return true;
        }

        /// <summary>
        /// 执行命令的时候触发要执行的方法
        /// </summary>
        /// <param name="parameter"></param>
        public void Execute(object? parameter)
        {
            ExecuteTask?.Invoke(parameter);
        }

        /// <summary>
        /// //通过构造函数进行委托参数的传递
        /// </summary>
        /// <param name="executeTask"></param>
        public Command(Action<object> executeTask)
        {
            ExecuteTask = executeTask!;
        }

    }
}

实现这些之后,一个可以实现用户登录主窗体了

(当前第二集 创建登录窗体  下一集主窗体嵌入子窗体)

 

标签:set,string,登录,get,System,窗体,using,public,Avalonia
From: https://www.cnblogs.com/funiyi816/p/18552514

相关文章

  • 登录界面
    <!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>用户登录-QSZ</title>......
  • Avalonia使用
    准备工作VS2022专业版    注意:如果需要嵌入主窗体中,那么那么一定要创建控件视图,我使用窗体视图嵌入失败了。创建好这运行测试,必须运行成功。(当前第一集创建项目   下一集创建登录窗体) ......
  • 生成 Windows 窗体 Blazor 应用 (WinForm+Bootstrap Blazor)
    官方文档有介绍如何用WinForm+ Blazor  生成应用,  生成Windows窗体Blazor应用 先按照官方文档启动VisualStudio。在“开始”窗口中,选择“创建新项目”:创建WinForm项目  起名为:WinFormsBlazor框架我们选择:.NET8.0 创建完成项目后,使用NuGet包管理器......
  • 微信小程序手机号登录
    import{wxPhoneLogin,getPhoneNumber}from'../login'//后端接口//服务端接口-获取openidfunctionqueryOpenIdFn(code){returnnewPromise((resolve)=>{wxPhoneLogin({code,}).then((res:any)=>{if(res.code=......
  • Linux隐藏登录和清除历史命令以及其他相关安全操作示例
    隐藏登录ssh -T [email protected] /bin/bash -i 命令拆解-T:告诉ssh客户端,不要分配一个TTY(伪终端)root:连接用户xxx.xxx.xxx.xxx:连接的服务器ip地址/bin/bash:在远程服务器上启动一个交互式的Bashshell。效果如下,默认登录一个终端的时候,会有一个pts/0,但是这里已经......
  • ssh配置密钥登录linux
    1、生成sshkey示例ssh-keygen-trsa2、将生成的公钥内容拷贝到linux服务器的~/.ssh/authorized_keys如果是root用户,那就放在根目录的.ssh目录下,如果是其它用户,放置在用户目录的.ssh目录下3、在本机.ssh目录下,创建config文件,内容如下Hostdata01.rootHostNam......
  • 织梦CMS登录之后空白的解决方法
    当织梦CMS(DedeCMS)登录后台后出现空白页面时,可能是由于多种原因导致的,比如文件权限问题、PHP配置问题、文件损坏或不完整等。以下是详细的解决步骤:1.打开织梦的报错模式为了更准确地定位问题,可以打开织梦的报错模式,以便查看具体的错误信息。找到并编辑 common.inc.php 文件......
  • 不同团队如何实现登录系统 (just for fun)
    某一天ceo需要一个登录系统,找了开发团队控制狂团队领导点了卡布奇诺,打开了自己轻薄的macbook,点开word文档,开始编写:1.项目背景2.名词解析3.数据表设计3.1user表3.2Role表。。。。。。4.api设计4.1用户信息api4.2登录api。。。。。。领......
  • SSO单点登录
    SSO单点登录方式  一、SSO单点登录  单点登录(SingleSign-On)是指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的应用系统。本质就是在多个应用系统中共享登录状态。举例来说,百度贴吧和百度地图是百度公司旗下的两个不同的应用系统,如果用户在......
  • Axios 拦截器示例(JWT 登录与自动刷新)
    1.安装axios首先,确保你已经安装了axios:npminstallaxios2.设置Axios拦截器importaxiosfrom'axios';//创建一个axios实例constaxiosInstance=axios.create({baseURL:'http://localhost:8000/',//后端API地址timeout:10000,//设置超时时间......