WPF视频学习-简单应用篇图书馆程序(一)

2024-06-14 09:36

本文主要是介绍WPF视频学习-简单应用篇图书馆程序(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.登录界面和主界面跳转

先把登录界面分为三行《Grid》
先添加两行:
在这里插入图片描述

<Grid><!--//分三行,行排列--><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition Height="auto"/><RowDefinition /></Grid.RowDefinitions><!--加入每行的内容--><TextBlock Margin="5" Grid.Row="0" Grid.Column="0" Text="市图书馆" FontSize="18" HorizontalAlignment="Center"/><StackPanel Grid.Row="1" Grid.Column="0" Background="#0078d4"><TextBlock Margin="5" Text="登录" FontSize="22" HorizontalAlignment="Center" Foreground="White"/></StackPanel>
</Grid>

第三行:

<!--第三行,为一个Grid,指定为上一层的三行一列中添加-->
<Grid Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"><!--增加四行进行布局--><Grid.RowDefinitions><RowDefinition Height="30"/><RowDefinition Height="30"/><RowDefinition Height="30"/><RowDefinition Height="30"/></Grid.RowDefinitions><!--增加两列进行布局--><Grid.ColumnDefinitions><ColumnDefinition Width="auto"/>    <!--列为自动宽度--><ColumnDefinition Width="200"/>     <!--右边文本框为固定宽度--></Grid.ColumnDefinitions><TextBlock Text="用户名" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/><TextBox Margin="2" Grid.Row="0" Grid.Column="1"/><TextBlock Text="密码" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center"/><TextBox Margin="2" Grid.Row="1" Grid.Column="1"/><!--在改行把列合二为一--><CheckBox Grid.ColumnSpan="2" Content="记住密码" Grid.Row="2"/><Button Grid.Row="3" Grid.ColumnSpan="2" Content="登录"/></Grid>
</Grid>

在这里插入图片描述

2.登录功能

点击响应和切面切换,(创建一个新的WPF窗口命名为WindowIndex)
响应:

private void Button_Click_up(object sender, RoutedEventArgs e)
{//注意要先在UI代码上给对应控件起名字:"x:Name="string username = txtUserName.Text;string password = txtPassWord.Text;if(username == "wpf" && password == "666"){//弹出新的界面//(格式化代码:ctrl+k,ctrl+D)//MessageBox.Show("OK");WindowIndex index = new WindowIndex();//创建新界面index.Show();//显示新界面this.Hide();//本窗口(登陆界面)隐藏}else{//弹出警告框MessageBox.Show("输入的用户名和密码不正确");}
}

3.绑定

定义:让xaml中的文本框(或者其他控件),绑定C#代码中的变量和属性(即不通过前面的控件名字进行识别)

//给当前界面指定上下值(在构造函数中),加入这行才会在刚开始把预设值显示在界面上
this.DataContext = this;		//.cs中 加入变量定义(pro+Tab键自动补全,然后再按需求进行更改)
public string UserName { get; set; } = "333";		//变量预设值
//.xaml中:增加Text="{Binding UserName}"
<TextBox Text="{Binding UserName}"  x:Name="txtUserName" Margin="2" Grid.Row="0" Grid.Column="1"/>

但是发现后续清空操作时,直接改变变量在xaml界面中没有进行显示上的改变,解决方式:让属性(变量)具有通知的功能,修改之后通知到界面:

加入代码(固定写法,可以照抄):

1.需要加一个继承自INotifyPropertyChangedpublic partial class MainWindow : Window ,INotifyPropertyChanged{......2.加入INotifyPropertyChanged的重写函数
public event PropertyChangedEventHandler PropertyChanged;
private void RaiseProChanged(string propertyName)
{PropertyChangedEventHandler handler = PropertyChanged;if (handler != null){handler(this, new PropertyChangedEventArgs(propertyName));}
}//“propfull” + Tab 可以补全
private string _UserName;public string UserName
{get { return _UserName; }set { _UserName = value; RaiseProChanged("UserName");}
}//可以注释掉之前的UserName 的定义
//public string UserName { get; set; } = "333";

,加入上面代码之后,再在需要清空的地方调用:

UserName = "";			//页面上的对应控件也会清空

类似UserName ,完成PassWord的变量创建,即完成界面和C#程序的变量绑定和变量更改通知界面,实现前后端分离。

4.MVVM—数据模型,…,命令

MVVM:是一种设计模式。M:model是一个数据模型 ;V:view界面 ;VM:ViewModel解决界面如何绑定数据模型(整合业务)

举例:M:数据模型(把变量,属性放在一个新的数据类中)
//⭐⭐先创建一个class,把之前继承自INotifyPropertyChanged,
//以及重写的函数和变量UserName,变量PassWord都转移(可直接剪切)到这里
public class LoginModel:INotifyPropertyChanged
{public event PropertyChangedEventHandler PropertyChanged;private void RaiseProChanged(string propertyName){PropertyChangedEventHandler handler = PropertyChanged;if (handler != null){handler(this, new PropertyChangedEventArgs(propertyName));}}//“propfull” + Tab 可以补全private string _UserName;public string UserName{get { return _UserName; }set{_UserName = value;RaiseProChanged("UserName");}}private string _PassWord;public string PassWord{get { return _PassWord; }set{_PassWord = value;RaiseProChanged("PassWord");}}
}

在MainWindow中使用:

//⭐⭐实例化
LoginModel loginModel;  //mvvm实例化做准备
public MainWindow()
{InitializeComponent();loginModel = new LoginModel();  //创建一个实例//给当前界面指定上下值//this.DataContext = this;this.DataContext = loginModel;  //因MVVM进行的修改
}//调用:(该变量需要加入实例化的名再调用)
loginModel.UserName = "";
loginModel.PassWord = "";

这篇关于WPF视频学习-简单应用篇图书馆程序(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060037

相关文章

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima