当前位置: 首页 > news >正文

Wpf 使用 Prism 实战开发Day30

登录界面设计

一.准备登录界面图片素材(透明背景图片)

1.把准备好的图片放在Images 文件夹下面,格式分别是.png和.ico

2.选中 login.png图片鼠标右键,选择属性。生成的操作选择==>资源

3.MyTodo 应用程序右键,属性,设置窗口图标

二.开始创建编写登录界面

1.添加用户控件,创建一个名为 LoginView.xaml 登录界面视图,并编写登录界面

<UserControl x:Class="MyToDo.Views.Dialog.LoginView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:MyToDo.Views.Dialog"xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"xmlns:prism="http://prismlibrary.com/"mc:Ignorable="d" Height="350" Width="600"><!--修改外观样式--><prism:Dialog.WindowStyle><Style TargetType="Window"><Setter Property="Width" Value="600"/><Setter Property="Height" Value="350"/><Setter Property="SizeToContent" Value="WidthAndHeight"/> <!--当前窗口大小--><Setter Property="ResizeMode" Value="NoResize"/> <!--不允许调整窗口大小--><Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen"/> <!--窗口启动位置--></Style></prism:Dialog.WindowStyle><Grid Background="White"><!--界面分左右两列--><Grid.ColumnDefinitions><ColumnDefinition Width="1.5*"/><ColumnDefinition/></Grid.ColumnDefinitions><Image Source="/Images/login.png" Margin="50"/><DockPanel Grid.Column="1" VerticalAlignment="Center" Margin="15"><TextBlock Text="欢迎使用" FontSize="22" FontWeight="Bold" Margin="0,10" DockPanel.Dock="Top"/><TextBox Margin="0,10" md:HintAssist.Hint="请输入账号" DockPanel.Dock="Top"/><PasswordBox Margin="0,10" md:HintAssist.Hint="请输入密码" DockPanel.Dock="Top"/><Button Content="登录系统" DockPanel.Dock="Top"/><DockPanel LastChildFill="False" Margin="0,10"><TextBlock Text="注册账户"/><TextBlock Text="忘记密码?" DockPanel.Dock="Right"/></DockPanel></DockPanel></Grid>
</UserControl>

 2.添加登录界面对应的后台逻辑处理类 LoginViewModel

public class LoginViewModel : BindableBase, IDialogAware
{public string Title { get; set; } = "ToDo"; //设置窗口标题public event Action<IDialogResult> RequestClose;public bool CanCloseDialog(){return true;}public void OnDialogClosed(){}public void OnDialogOpened(IDialogParameters parameters){}
}

三.应用程序启动的时候,先弹出登录界面。登录成功后再跳转内容主页

 1.首先在应用程序启动初始化的过程中,进行判断。拿到弹窗的对话服务。

四.最后,把登录界面注册到容器中

  containerRegistry.RegisterDialog<LoginView, LoginViewModel>();


 public partial class App : PrismApplication{/// <summary>/// 创建启动页面/// </summary>/// <returns></returns>protected override Window CreateShell(){return Container.Resolve<MainView>();}protected override void OnInitialized(){var dialog= Container.Resolve<IDialogService>();//取到对话框服务//弹出登录界面dialog.ShowDialog("LoginView", callback =>{if (callback.Result == ButtonResult.None){Application.Current.Shutdown();//关闭当前应用程序return;}var service = App.Current.MainWindow.DataContext as IConfigureService;if (service != null) service.Configure();base.OnInitialized();});}/// <summary>/// 依懒注入的方法/// </summary>/// <param name="containerRegistry"></param>protected override void RegisterTypes(IContainerRegistry containerRegistry){//对封装的http请求类,进行注入。并且设置一个默认参数containerRegistry.GetContainer().Register<HttpRestClient>(made:Parameters.Of.Type<string>(serviceKey:"webUrl"));//注册默认的服务地址containerRegistry.GetContainer().RegisterInstance(@"http://localhost:5143/",serviceKey: "webUrl");//注册服务containerRegistry.Register<IToDoService, ToDoService>();containerRegistry.Register<IMemoService, MemoService>();containerRegistry.Register<IDialogHostService, DialogHostService>();//注册弹窗containerRegistry.RegisterDialog<LoginView, LoginViewModel>();containerRegistry.RegisterForNavigation<AddToDoView, AddToDoViewModel>();containerRegistry.RegisterForNavigation<AddMemoView, AddMemoViewModel>();containerRegistry.RegisterForNavigation<AboutView>();containerRegistry.RegisterForNavigation<MsgView,MsgViewModel>();containerRegistry.RegisterForNavigation<SkinView, SkinViewModel>();containerRegistry.RegisterForNavigation<IndexView, IndexViewModel>();containerRegistry.RegisterForNavigation<MemoView, MemoViewModel>();containerRegistry.RegisterForNavigation<ToDoView, ToDoViewModel>();containerRegistry.RegisterForNavigation<SettingsView, SettingsViewModel>();}}

相关文章:

  • YOLOv5训练自定义数据集模型的参数与指令说明
  • Flutter 中的 SliverFillRemaining 小部件:全面指南
  • Golang | Leetcode Golang题解之第120题三角形最小路径和
  • kafka-消费者组-发布订阅测试
  • linux同步搭建多台服务器
  • Caused by: java.lang.IllegalStateException
  • docker安装Mysql5.7版本
  • Visual Studio怎么用?
  • MySql每天从0开始生成特定规则自增编号
  • Llama模型家族之RLAIF 基于 AI 反馈的强化学习(六) RLAIF 代码实战
  • 开源大模型源代码
  • chap5 CNN
  • 使用 Vue 3 和 vue-print-nb 插件实现复杂申请表的打印
  • 大宋咨询(深圳车主满意度调查)如何开展汽车展会观众满意度问卷调查
  • JVM思维导图
  • .pyc 想到的一些问题
  • 【EOS】Cleos基础
  • CSS实用技巧
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Promise初体验
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 从零搭建Koa2 Server
  • 经典排序算法及其 Java 实现
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 原生JS动态加载JS、CSS文件及代码脚本
  • Nginx实现动静分离
  • 我们雇佣了一只大猴子...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​数据链路层——流量控制可靠传输机制 ​
  • #NOIP 2014#Day.2 T3 解方程
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2)nginx 安装、启停
  • (libusb) usb口自动刷新
  • (纯JS)图片裁剪
  • (二)c52学习之旅-简单了解单片机
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十三)Flask之特殊装饰器详解
  • (十三)Maven插件解析运行机制
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)WLAN定义和基本架构转
  • (转)LINQ之路
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)ORM
  • (转)程序员技术练级攻略
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *** 2003
  • .NET MAUI Sqlite程序应用-数据库配置(一)