WPF视频学习-基础知识篇

1.简介WPF:

C# 一套关于windows界面应用开发框架

2.WPF和winform的差别

,(WPF比较新)
创建新项目使用模板:在这里插入图片描述
WPF使用.xaml后缀,双击可查看操作界面和设置代码,其文件展开之后中有MainWindow.xaml.cs为程序交互逻辑。
winform为Form.cs,双击可进入交互逻辑界面编写,其文件展开之后下层中有Form1.Designal.cs包含 Windows 窗体设计器生成的代码,可进行查看。

界面效果实现的难易程度:WPF去实现:直接搜索需要的控件形式,然后把对应的代码加入即可。

WPF绑定:可以将界面上的某个属性跟流程中做绑定,可以进行同步更新

3.基础项目文件知识

生成文件目录:代码文件下bin目录下的对应的Debug/Realse
项目中用到的资源文件目录:代码文件下Properties/Resources.resx添加进去
App.xaml中可设置启动页
MainWindow.xaml为页面,可添加多个WPF窗口(例如:Window1.xaml)

4.布局控件Grid和StackPanel

(Grid需要自己手动移动控件位置,而StackPanel会自动进行堆积)
分为客户区和非客户区:
“Grid”为布局控件,在非客户区可用,为行列布局,布局可动态分配
而“StackPanel”会根据给的控件依次排列
WPF像素无关

//按行排列:
<Grid.RowDefinitions><RowDefinition Height="20"/>	 <!--同时设置宽度--><RowDefinition Height="20"/>    <!--多增加一行--><RowDefinition/>
</Grid.RowDefinitions>//按列排列
<Grid ShowGridLines="True" Grid.Row="2" Grid.Column="0"><Grid.ColumnDefinitions><ColumnDefinition Width="70"/><ColumnDefinition/></Grid.ColumnDefinitions>
</Grid>

实现:
在这里插入图片描述
代码:
练习代码链接

5.Style 样式:用法介绍

可以统一设置一类控件的形式
举例:作用于所有button,在每次添加一个button时,会自动调用这个样式

<Window.Resources><Style TargetType="Button">     <!--作用于button--><Setter Property="Background" Value="Red"/><Setter Property="FontSize" Value="20"/><Setter Property="Height" Value="50"/></Style>
</Window.Resources>

【样式多样性】,在想要使用样式时才使用

<Window.Resources>
<Style x:Key="LoginStyle" TargetType="Button"><Setter Property="Background" Value="Green"/><Setter Property="FontSize" Value="20"/><Setter Property="Height" Value="50"/>
</Style><Style x:Key="QuitStyle" TargetType="Button"><Setter Property="Background" Value="Green"/><Setter Property="FontSize" Value="20"/><Setter Property="Height" Value="50"/>
</Style>
</Window.Resources>//使用
<Grid><StackPanel><Button Style="{StaticResource LoginStyle}"  Content="登录" />    <!--定向使用--><Button Style="{StaticResource QuitStyle}" Content="退出" />      <!--定向使用--><Button Content="忘记密码"  /></StackPanel></Grid>

在这里插入图片描述
【另一种形式:先定义button使用的基础样式,在基于这个基础的样式定义个性化的样式】

<Style TargetType="Button"><Setter Property="Background" Value="WhiteSmoke"/><Setter Property="FontSize" Value="20"/><Setter Property="Margin" Value="20,10"/>
</Style><!--延用之前的统一style,创建新的style-->
<Style x:Key="loginStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"><Setter Property="Background" Value="Green"/></Style><!--延用之前的统一style,创建新的style-->
<Style x:Key="QuitStyle" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"><Setter Property="Background" Value="Red"/></Style>//样式使用时跟上面举例是相同的

【style外部引用】:方便管理,可以供所有的界面去使用
1.添加资源字典的类BaseButtonStyleDictionary1,把想要全局使用的style加在这里

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><!--//把之前写下style的复制到这里来--><Style TargetType="Button"><Setter Property="Background" Value="WhiteSmoke"/><Setter Property="FontSize" Value="20"/><Setter Property="Margin" Value="20,10"/></Style>.........</ResourceDictionary>

2.把创建的BaseButtonStyleDictionary1加入到App.xaml中,成为全局可识别变量

<Application.Resources><!--//加入资源字典--><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="/WpfApp1;component/BaseButtonStyleDictionary1.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>

3.在下面的窗口MainWindow.xaml等文件中,正常Style引用即可识别

6.自定义按钮以及设置触发器

自定义模板:例如之前的圆角按钮

<Button Width="300" Height="100" Content="自定义按钮" Background="#0078d4" FontSize="50" Foreground="White"><Button.Template><ControlTemplate TargetType="{x:Type Button}"><Border Background="Red" BorderBrush="Black" BorderThickness="4" CornerRadius="10"><ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/></Border></ControlTemplate></Button.Template>
</Button>

生成圆角按钮:
在这里插入图片描述
但第一行设置的会被覆盖掉。后面值设为可改,与原始按钮设置的值相同,进行同步更改不会进行覆盖:,以及触发器的部分

<Button.Template><ControlTemplate TargetType="{x:Type Button}"><Border x:Name="boder" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10"><!--<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>--><TextBlock x:Name="txtContent" Text="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/></Border><!--//触发器设置--><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True" ><!--//当鼠标移入则启动触发操作--><Setter TargetName="boder" Property="Background" Value="black"/><Setter TargetName="txtContent" Property="FontSize" Value="100"/></Trigger><Trigger Property="IsPressed" Value="True" ><!--//当鼠标点击则启动触发操作--><Setter TargetName="boder" Property="Background" Value="white"/></Trigger></ControlTemplate.Triggers></ControlTemplate>
</Button.Template>

7.C#代码事件

界面上的的操作都跟相应的C#代码对应执行
增加界面点击事件,直接在按钮创建的时候添加Click=“Button_Click_1” ,

<Button Content="你好" Width="200" Height="30" Click="Button_Click_1" HorizontalAlignment="Center" VerticalAlignment="Center"/>    

则进入对应的.xaml.cs则可看见自动创建了

private void Button_Click_1(object sender, RoutedEventArgs e)
{}

在其中增加时间处理的流程

<StackPanel><TextBlock x:Name="txtTotal" Text ="计算结果" Visibility="Hidden"/><Button Content="你好" Width="200" Height="30" Click="Button_Click_1" HorizontalAlignment="Center" VerticalAlignment="Center"/></StackPanel>
private void Button_Click_1(object sender, RoutedEventArgs e)
{int num1 = 200;int num2 = 300;int total = num1 + num2;txtTotal.Text = total.ToString();//更改枚举类型(ctrl + “J”)会默认进行代码提示txtTotal.Visibility = Visibility.Visible;
}

查看所有的事件:点击控件之后有属性界面,点击【⚡】标识符可查看所有信号。且进入该信号边界可显示该信号内容,双击则可自动生成对应执行函数。
在这里插入图片描述
例如:鼠标移入和鼠标移出的事件

//鼠标移入控件范围内
private void Button_MouseEnter(object sender, MouseEventArgs e)
{txtTotal.Text = "你的鼠标进入button的范围了";
}//鼠标移出控件范围内
private void Button_MouseLeave(object sender, MouseEventArgs e)
{txtTotal.Text = "你的鼠标移出button的范围了";
}

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

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

相关文章

【Python】数据处理:文本文件操作

在Python中&#xff0c;处理文本文件是非常常见的任务。可以使用内置的open函数来打开、读取和写入文本文件。 打开文件 使用open函数打开文件。该函数有两个主要参数&#xff1a; open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, ope…

OmniGlue: Generalizable Feature Matching with Foundation Model Guidance

【引用格式】&#xff1a;Jiang H, Karpur A, Cao B, et al. OmniGlue: Generalizable Feature Matching with Foundation Model Guidance[J]. arXiv preprint arXiv:2405.12979, 2024. 【网址】&#xff1a;https://arxiv.org/pdf/2405.12979 【开源代码】&#xff1a;https…

Redis中的主从复制

分布式系统中的几种Redis部署方式 为了解决一个程序只部署在一个服务器上的单点问题&#xff1a; 可用性问题&#xff0c;如果这个机器挂了&#xff0c;就意味着服务就中断了 一个程序只部署在一台机器上&#xff0c;它的性能/支持的并发量也是有限的 所以&#xff0c;就引…

力扣 240.搜素矩阵II

题目描述&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9…

openpose标定中棋盘格检测错误的解决方案

文章目录 1、openpose 棋盘格检测流程2、解决过程3、实测结果1、openpose 棋盘格检测流程 在opencv中通过调用cv::findChessboardCorners()函数,同时指定棋盘格内角点尺寸来检测画面中的棋盘格,结果将以一定顺序来保存结果。通常指定尺寸的两个纬度的值不能相同,例如当指定…

OpenCV 双目相机标定

文章目录 一、简介1.1单目相机标定1.2双目相机标定二、实现代码三、实现效果参考资料一、简介 1.1单目相机标定 与单目相机标定类似,双目标定的目的也是要找到从世界坐标转换为图像坐标所用到的投影P矩阵各个系数(即相机的内参与外参)。具体过程如下所述: 1、首先我们需要…

【STM32】ucOS-III多任务程序

【STM32】uc/OS-III多任务程序 文章目录 【STM32】uc/OS-III多任务程序STM32F103C8T6移植uC/OS-III基于HAL库超完整详细过程与相关实验实验任务实验过程一、 uC/OS-III源码下载二、 建立STM32CubeMX工程三、 复制uC/OS-III文件到工程文件夹四、 添加工程组件和头文件路径五、修…

数据结构之计数排序算法【图文详解】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

通过网址下载静态网页的仿站工具

下载地址&#xff1a;通过网址下载静态网页的仿站工具 超级实用的一款工具

学习笔记——路由网络基础——直连路由(direct)

二、直连路由(direct) 直连路由(direct)&#xff1a;直接相连&#xff0c;接口配置好ip地址并up后自动生成的路由。默认优先级为0 Destination&#xff1a;表示路由的目的地址。用来标识IP包的目的地址或目的网络。 Mask&#xff1a;表示目的地址的子网掩码长度。 与目的地址…

MyBatisPlus总结二

MybatisPlus总结一在这&#xff1a; MybatisPlus总结1/2-CSDN博客 六、分页查询&#xff1a; 6.1.介绍&#xff1a; MybatisPlus内置了分页插件&#xff0c;所以我们只需要配置一个分页拦截器就可以了&#xff0c;由于不同的数据库的分页的方式不一样&#xff0c;例如mysql和…

轻松连接远程服务器SecureCRT for Mac/Windows

SecureCRT是一款功能强大的终端仿真器和文件传输工具&#xff0c;专为网络管理员、开发人员和系统工程师设计。它支持SSH、Telnet、RDP和串口等多种协议&#xff0c;提供安全、高效的远程访问和管理体验。SecureCRT具有多窗口/多标签管理、自定义终端仿真、颜色方案优化等高级功…

Linux内核下网卡硬件 MAC 和PHY分析笔记

1 简介 通常CPU自带的以太网接口是MAC控制器&#xff0c;为了实现完整的功能&#xff0c;外围硬件还需要增加一个PHY芯片。 PHY芯片在建立网络连接时负责协商确定网速、全双工 或者 半双工等。在正常通讯时负责在MAC控制器的MII信号 与 网线中的信号之间做转换。 本文的内核代…

最快的开源UDP传输工具:Kcptun

Kcptun&#xff1a;极速网络隧道&#xff0c;让数据传输飞起来&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 kcptun 是一个轻量级、高性能的TCP/UDP网络加速工具&#xff0c;由xtaci开发并托管在GitHub上。它通过使用kcp协议&#xff0c;为网络数据传输提供了一个快…

[linux] makefilegdb理解

目录 Linux项目自动化构建工具-make/Makefile 背景 理解 依赖关系 依赖方法 原理 Linux调试器-gdb使用 背景 开始使用 Linux项目自动化构建工具-make/Makefile 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力 一个工…

推荐一款AI音乐生成工具和一款浏览器

大家好&#xff0c;今天给大家带来2款软件&#xff0c;一款是移动浏览器&#xff0c;一款是AI音乐生成软件。 Alook Alook是一款移动端浏览器&#xff0c;它以其独特的无广告、无推送、无新闻的"三无"特性&#xff0c;为用户提供了一个清爽的上网环境。Alook不仅界…

【算法小记】深度学习——时间序列数据分析 Time series Data Analysis

在本篇博客中将简单介绍常见的几种循环神经网络和一维卷积神经网络&#xff0c;并使用一些简答的数据进行拟合分析。本文相对适合刚入门的同学&#xff0c;同时也作为自己过去一段时间学习的总结和记录&#xff0c;现在神经网络框架已经非常完善的支持了很多常见和有效的深度学…

【优选算法】BFS解决FloodFill算法

一、经验总结 什么是FloodFill算法&#xff1f; FloodFill算法是一种用于填充连通区域的算法&#xff0c;通常用于图像处理和计算机图形学中。它从给定的起始点开始&#xff0c;向周围相邻的像素进行扩散填充&#xff0c;直到遇到边界或者其他指定条件停止。 FloodFill算法还…

新买的移动硬盘无法识别

文章目录 背景解决方案 背景 同事新买的移动硬盘&#xff0c;插在电脑上识别不出来盘符&#xff0c;检查了一下&#xff0c;硬盘没问题应该&#xff0c;是ssk的硬盘盒M.2的SSD&#xff0c;硬盘驱动也是正常的&#xff0c;插拔了几次&#xff0c;都不识别&#xff0c;换了太电脑…

【Java】解决Java报错:OutOfMemoryError

文章目录 引言1. 错误详解2. 常见的出错场景2.1 内存泄漏2.2 大数据结构2.3 JVM内存参数配置不当 3. 解决方案3.1 内存泄漏检测与修复3.2 优化数据结构3.3 调整JVM内存参数3.4 使用弱引用 4. 预防措施4.1 定期进行内存分析4.2 合理设计数据结构4.3 使用合适的JVM内存参数4.4 优…