Wpf 使用 Prism 实战开发Day30

news2025/1/19 23:05:50

登录界面设计

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

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>();
     }
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1719663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【简单介绍下Milvus,什么是Milvus?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

YZW900规格书

title: “深圳市沃进科技有限公司” 深圳市沃进科技有限公司 TOP视图 特性 异地组网&#xff0c;远程访问有线/无线备份单模双卡备份5G转有线&#xff0c;5G转WIFI2.4G5.8G双频WIFI三网口&#xff0c;WAN/LAN可切换软硬件看门狗智能防掉线云平台、客户端远程管理安装支架安装铝…

JVM哪些区域可能出现内存溢出,哪些地方需要GC?

GC顾名思义也就是垃圾回收&#xff0c;有人的地方就有江湖&#xff0c;那有数据的地方也理应有垃圾回收&#xff0c;所以思考一下&#xff0c;沿着之前提到过的JVM内存分区&#xff0c;堆&#xff0c;栈&#xff0c;程序计数器&#xff0c;方法区 堆、栈、方法区…

使用 Apache Commons Exec 自动化脚本执行实现 MySQL 数据库备份

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

为何懂行的人都在选海信Mini LED?

今年的618大促比往年来得要更早一些。纵览各电商平台的电视产品&#xff0c;能发现Mini LED电视的出镜率很高&#xff0c;成了各大品牌的主推产品。 对于什么样的Mini LED更值得买&#xff0c;各品牌都有自己的说辞。因为缺乏科学系统的选购标准&#xff0c;消费者容易在各方说…

Python零基础-下【详细】

接上篇继续&#xff1a; Python零基础-中【详细】-CSDN博客 目录 十七、网络编程 1、初识socket &#xff08;1&#xff09;socket理解 &#xff08;2&#xff09;图解socket &#xff08;3&#xff09;戏说socket &#xff08;4&#xff09;网络服务 &#xff08;5&a…

Docker安装Redis(云服务器)

准备&#xff1a; 在云服务器中开启6370端口号 docker run -d --name redis -p 6379:6379 redis 这条命令使用docker运行一个名为"redis"的容器&#xff0c;映射容器的6379端口到主机的6379端口&#xff0c;并且使用redis镜像来运行容器。REDIS是一个开源的内存数据…

18.Redis之哨兵

1.哨兵机制的介绍 通过自动化的手段,来解决主节点挂了的问题~~ 哨兵机制, 是通过独立的 进程 来体现的.和之前 redis-server 是不同的进程!! redis-sentine| 不负责存储数据,只是对其他的 redis-server 进程起到监控的效果~~ 通常哨兵节点,也会搞一个集合~~(多个哨兵节点构成的…

TQSDRPI开发板教程:实现LWIP自环

项目资源分享 链接&#xff1a;https://pan.baidu.com/s/1QckFYSwua-Fpxk3tewledQ 提取码&#xff1a;bewt 打开vivado2019.1创建工程 下一步 设置工程名称与地址。勾选reate…选项&#xff0c;会创建一个新的文件夹&#xff0c;项目保存在其中&#xff0c;文件夹名称与工程名…

伦敦金1手指的是什么?

就算没有进行过伦敦金投资&#xff0c;甚至是没有做过任何金融产品投资的朋友&#xff0c;相信也听过别人做交易决定&#xff0c;他们都是1手两手那样头买入。有些朋友就好奇了&#xff0c;这伦敦金1手指的是什么意思&#xff1f;下面我们就来讨论一下。 首先&#xff0c;如果我…

云计算与 openstack

文章目录 一、 虚拟化二、云计算2.1 IT系统架构的发展2.2 云计算2.3 云计算的服务类型 三、Openstack3.1 OpenStack核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机&#xff0c;虚拟机共享物理机的 CPU、内存、IO 硬件资源&#xff0c;但逻辑上虚拟机之…

【论文导读】Grid Graph Reduction for Efficient Shortest Pathfinding(2023 Access)

Grid Graph Reduction for Efficient Shortest Pathfinding 作者&#xff1a;CHAN-YOUNG KIM AND SANGHOON SULL 文章提出了一种“基于模式识别的网格阻塞”&#xff08; Pattern-Based Blocking on grid graphs&#xff0c;PBGG&#xff09;的预处理方法&#xff0c;以加快最…

【康耐视国产案例】智能AI相机联合OSARO为Zenni眼镜实现订单履约自动化

在电商潮流下&#xff0c;Zenni眼镜作为全球领先的在线眼镜零售商&#xff0c;每年销售超过600万副眼镜&#xff0c;却面临着一个独特而复杂的问题——需要通过扫描眼镜盒内的条形码来处理订单。传统手动处理已经到达流程瓶颈&#xff0c;急需一种更加自动化、可扩展的方法。为…

小数第n位【蓝桥杯】

小数第n位 模拟 思路&#xff1a;arr数组用来记录已经出现过的a&#xff0c;在循环时及时退出。易知题目的3位即a%a后的第n-1,n,n1位。该代码非常巧妙&#xff0c;num记录3位的输出状况。 #include<iostream> #include<map> using namespace std; typedef long l…

Python实现定时任务的三种方案——schedule、APScheduler、Celery

schedule schedule是一个轻量级的Python库&#xff0c;用于定期执行任务&#xff0c;即定时任务调度。它提供了一种简单直观的方式来自定义任务执行的时间规则&#xff0c;而无需复杂的线程或进程管理知识。schedule适用于那些需要在后台定期执行某些功能的Python应用程序&…

【Tlias智能学习辅助系统】03 部门管理 前后端联调

Tlias智能学习辅助系统 03 部门管理 前后端联调 前端环境 前端环境 链接&#xff1a;https://pan.quark.cn/s/8720156ed6bf 提取码&#xff1a;aGeR 解压后放在一个不包含中文的文件夹下&#xff0c;双击 nginx.exe 启动服务 跨域的问题已经被nginx代理转发了&#xff0c;所以…

推荐一款开源电子签章/电子合同系统

文章目录 前言一、项目介绍二、项目地址三、技术架构四、代码结构介绍五、功能模块六、功能界面首页面手写签名面板电子印章制作数字证书生成 总结 前言 大家好&#xff01;我是智航云科技&#xff0c;今天为大家分享一个免费开源的电子签字系统。 一、项目介绍 开放签电子签…

MyBatis延迟加载缓存分页逆向工程

文章目录 延迟加载概述步骤 缓存一级缓存介绍原理 二级缓存介绍 设置缓存对象策略原理开启步骤属性解释是否使用一级缓存 分页插件使用步骤 逆向工程介绍搭建使用增删修改查 延迟加载 概述 延迟加载本身是依赖于多表查询的 延迟加载中返回值要选择resultMap返回的结果一定是D…

[ROS 系列学习教程] 建模与仿真 - Xacro 语法

ROS 系列学习教程(总目录) 本文目录 一、属性与属性块二、数学表达式三、宏3.1 宏的基本使用3.2 属性块做为宏的入参3.3 任意数量元素做为宏的入参3.4 指定多个块元素的处理顺序3.5 宏嵌套3.6 默认参数3.7 局部属性 四、Rospack 命令五、包含其他 xacro 文件六、条件语句七、YA…

连锁超市能源能效管理方案

1.概述 连锁超市的能源消耗是其运营成本的重要组成部分。有效的能源能效管理不仅可以降低运营成本&#xff0c;也有助于环保&#xff0c;实现可持续发展。本文将探讨几种关键的能源能效管理策略。 2.智能照明系统 采用智能照明系统是提高能效的关键一步。这些系统可以根据店…