WPF 零基础入门笔记(1):WPF静态页面,布局+样式+触发器

文章目录

  • 官方文档
  • 往期回顾
    • 零基础笔记
    • 项目实战(已完结)
  • WPF项目创建
    • 为什么选net core版本
  • WPF 静态页面
    • WPF 页面布局
    • WPF样式
      • Style样式
      • 行内样式
      • 行外样式
        • 如果是简单样式,可以这么写
        • 如果是复杂样式
      • WPF样式继承
      • WPF触发器
        • 单条件触发器
        • 多条件触发

官方文档

往期回顾

零基础笔记

WPF 零基础入门笔记(0):WPF简介

项目实战(已完结)

WPF MaterialDesign 初学项目实战(0):github 项目Demo运行
WPF MaterialDesign 初学项目实战(1)首页搭建
WPF MaterialDesign 初学项目实战(2)首页导航栏样式
WPF MaterialDesign 初学项目实战(3)动态侧边栏
WPF MaterialDesign 初学项目实战(4)侧边栏路由管理
WPF MaterialDesign 初学项目实战(5):设计首页
WPF MaterialDesign 初学项目实战(6):设计首页(2),设置样式触发器。已完结

WPF项目创建

我们这里选择.net core版本的WPF

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

为什么选net core版本

.NET core是以后.NET 发展的方向。
.NET core 特点

  • 微软主推的方向,.NET framework目前只有维护性更新
  • 跨平台,虽然WPF不能跨平台,但是你以后写MAUI,控制台程序,WEBAPI,都可以在Linux端运行。跨平台主要就是跨linux,方便项目部署。
  • 配套的生态都已经从NET Framework 迁移过来了。
  • 你都选择WPF而不是 winform,那顺便多学一点呗

WPF 静态页面

如果学过web端,我这里就拿Web端来进行比较。
web包含:html,css,JS。

  • html:声明有什么元素
  • CSS:让界面更加好看
  • JS:页面逻辑代码

在WPF中,分离会更加彻底。WPF包含Xmal和C#。

  • Xmal:声明元素,声明样式,负责交互逻辑
    • 对应Web端的 Html+CSS+简单页面交互
  • C#:复杂页面交互和业务逻辑

控件我就略过了,没什么好说的,就是按钮,文本,输入框。参数自己去了解一下。不占用太多篇幅

比如Button类
WPF Button
但是我只能说,微软的文档写的一坨狗屎,第一我查不到WPF专门的

WPF 页面布局

我之前写过,就不重复写了。

WPF:WPF原生布局说明

WPF样式

我们输入

        <Style>
			<S   //出现提示
        </Style>

在这里插入图片描述
这里我们可以看到有好几种样式

  • Style.Setters
    • Style样式:类似于CSS,用于设置页面的形象
  • Style.Tirggers
    • 触发器,用于设置简单的交互
  • Sytle.Resource
    • 资源,没怎么用过

Style样式

如果安装CSS的方式来说,WPF分为行内样式和行外样式

效果,生成如下图片

在这里插入图片描述

行内样式

<Rectangle Width="200"
                   Height="160"
                   Stroke="Blue">
            <Rectangle.Fill>
                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">//使用行内标签来对代码进行优化
                    <LinearGradientBrush.GradientStops>
                        <GradientStop Offset="0.2"
                                      Color="LightBlue" />
                        <GradientStop Offset="0.7"
                                      Color="DarkBlue" />
                        <GradientStop Offset="1.0"
                                      Color="LightBlue" />
                    </LinearGradientBrush.GradientStops>
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>

行外样式

如果是简单样式,可以这么写

        <Style x:Key="MyButton"
               TargetType="Button">
            <Style.Setters>
                <Setter Property="Content"
                        Value="" />
            </Style.Setters>
        </Style>

如果是复杂样式

 <Window.Resources>
        <!--x:Key为样式的名称,TargetType是样式生效的目标-->
        <Style x:Key="MyRectFill" TargetType="Rectangle">
        <!--Style是样式设置-->
            <Style.Setters>
            <!--设置Recangle的Fill属性。使用Property=属性,Value=值的形式-->
                <Setter Property="Fill" >
                    <Setter.Value><!--对应的样式属性,如果Value是简单字符串,可以不展开-->
                        <LinearGradientBrush StartPoint="0,0"
                                             EndPoint="1,1">
                            <GradientStop Offset="0.2"
                                          Color="LightBlue" />
                            <GradientStop Offset="0.7"
                                          Color="DarkBlue" />
                            <GradientStop Offset="1.0"
                                          Color="LightBlue" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
    </Window.Resources>
    <Grid>
        <Rectangle Width="200"
                   Height="160"
                   Stroke="Blue" Style="{StaticResource MyRectFill}" >
        </Rectangle>
    </Grid>

WPF样式继承

一个简单的按钮

    <Window.Resources>
        <Style x:Key="MyButton"
               TargetType="Button">
            <Style.Setters>
                <Setter Property="Content"
                        Value="按钮" />
                <Setter Property="Width" Value="100"/>
                <Setter Property="Height" Value="30"/>
            </Style.Setters>
        </Style>
    </Window.Resources>
    <Grid>
        <Button  Style="{StaticResource MyButton}"/>
    </Grid>

在这里插入图片描述

 <Window.Resources>
        <Style x:Key="MyButton"
               TargetType="Button">
            <Style.Setters>
                <Setter Property="Content"
                        Value="按钮" />
                <Setter Property="Width" Value="100"/>
                <Setter Property="Height" Value="30"/>
            </Style.Setters>
        </Style>
        <!--使用继承,继承MyButton-->
        <Style x:Key="MyButton2" BasedOn="{StaticResource MyButton}"  TargetType="Button">
            <Style.Setters >
                <Setter Property="Background"
                        Value="Yellow" />
                <Setter Property="BorderBrush" Value="Red"/>
            </Style.Setters>
        </Style>
    </Window.Resources>
    <Grid>
        <Button  Style="{StaticResource MyButton2}"/>
    </Grid>

效果

在这里插入图片描述

WPF触发器

WPF触发器用于简单的交互逻辑
WPF为了实现业务和界面逻辑尽可能的分离,在Xmal中可以实现简单的交互逻辑和页面元素沟通。而简单的交互逻辑就是通过WPF触发器来实现的

单条件触发器

这里设计一个简单的触发器,通过鼠标悬停事件来进行区分。

 <Window.Resources>
        <Style x:Key="MyButton" TargetType="Button">
            <!--设置触发器-->
            <Style.Triggers>
                <!--当鼠标停留属性为Ture时-->
                <Trigger Property="IsMouseOver"
                         Value="True">
                    <Setter Property="Foreground"
                            Value="Red" />
                    <Setter Property="FontSize"
                            Value="30" />
                </Trigger>
                <!--当鼠标停留事件为False时-->
                <Trigger Property="IsMouseOver"
                         Value="False">
                    <Setter Property="Foreground"
                            Value="Blue" />
                    <Setter Property="FontSize"
                            Value="20" />
                </Trigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>
    <Grid>
        <Button Width="100"
                Height="50"
                Content="按钮"
                Style="{StaticResource MyButton}" />
    </Grid>

实现效果

在这里插入图片描述

多条件触发

<Window.Resources>
        <Style x:Key="MyButton" TargetType="Button">
            <!--设置触发器-->
            <Style.Triggers>
                <!--多条件触发-->
                <MultiTrigger>
                    <!--当鼠标悬停+鼠标点击时,字体颜色变红-->
                    <MultiTrigger.Conditions>
                        <Condition Property="IsMouseOver"
                                   Value="True" />
                        <Condition Property="IsFocused"
                                   Value="True" />
                    </MultiTrigger.Conditions>
                    <MultiTrigger.Setters>
                        <Setter Property="Foreground" Value="Red"/>
                    </MultiTrigger.Setters>
                </MultiTrigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>
    <Grid>
        <Button Width="100"
                Height="50"
                Content="按钮"
                Style="{StaticResource MyButton}" />
    </Grid>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【性能测试一】性能测试概述

目录 &#x1f31f;一、性能测试的基础概念 &#x1f308;1、生活中软件相关的性能问题&#xff1f; &#x1f308;2、性能测试的概念 &#x1f308;3、性能测试与功能测试的区别&#xff1f; &#x1f308;4、什么样的软件属于性能好&#xff1f;什么样的软件属于性能不好…

网络协议TCP/IP 协议学习笔记一

T C P / I P通常被认 为是一个四层协议系统&#xff0c;每一层负责不同的功能&#xff1a; 1) 链路层&#xff0c;有时也称作数据链路层或网络接口层&#xff0c; 通常包括操作系统中的设备驱动程序和计算机 中对应的网络接口卡。它们一起处理与电缆&#xff08;或其他任何传输…

黑客常用cmd命令(window版)

1、ping命令 ping命令是一个常用的网络工具&#xff0c;用来测试和诊断网络连接状况。通过发送ICMP&#xff08;Internet控制消息协议&#xff09;数据包到目标主机&#xff0c;并接收回复的数据包&#xff0c;可以测量目标主机的可达性、平均响应时间等指标。 在Windows操作…

【C++】哈希的应用

文章目录 一、位图1. 位图的引入2. 位图的实现3. 位图的应用4. 哈希切割 二、布隆过滤器1. 布隆过滤器的引入2. 布隆过滤器的实现3. 布隆过滤器的应用4. 布隆过滤器的总结 一、位图 1. 位图的引入 我们先来看一道面试题&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没…

Spring Boot 如何使用 @RequestParam 进行数据校验

Spring Boot 如何使用 RequestParam 进行数据校验 在 Web 应用程序中&#xff0c;用户提交的数据通常以请求参数的形式传递。在 Spring Boot 中&#xff0c;可以使用 RequestParam 注解来获取请求参数。但是&#xff0c;如何确保这些请求参数的有效性呢&#xff1f;在本文中&a…

APP测试面试题快问快答(五)

21. App自动化你用的什么工具&#xff1f; 框架&#xff1a;Appium 编译环境和工具&#xff1a;python3.7和PyCharm 环境&#xff1a;Android sdk 第三方模拟器&#xff1a;夜神、蓝叠等模拟器 定位工具&#xff1a;uiautomatorviewer 实时日志查看&#xff1a;ddms 22.…

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术&#xff0c;智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗&#xff0c;打电话人员抽烟等违规行为&#xff0c;灭火器未正确摆放&#xff0c;明火和烟雾等异常状态&a…

TypeScript零基础入门之背景介绍和环境安装

一、什么是TypeScript TypeScript是一种由微软开发和维护的开源编程语言。它是JavaScript的超集&#xff0c;意味着任何JavaScript程序都是一种有效的TypeScript程序。TypeScript添加了静态类型、类、接口、枚举和命名空间等概念&#xff0c;同时支持ES6特性。TypeScript被视为…

Kubernetes入门实战课-初始容器

Kubernetes入门实战课-初始容器 文章目录 Kubernetes入门实战课-初始容器课前准备初始容器Docker 的形态Docker 的安装Docker 的架构 容器的本质隔离原因与虚拟机区别隔离是怎么实现的 镜像创建容器镜像&#xff1a;如何编写正确、高效的Dockerfile镜像的内部机制是什么Dockerf…

Spring介绍

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE、Spring 目录 1、Spring简介2、轻量级和非侵入性3、IoC容器4、AOP支持5、声明式事务管理6、数据访问支持…

【基于Django框架的在线教育平台开发-02】用户注册功能开发

用户注册功能开发 文章目录 用户注册功能开发1 模型层开发2 视图层开发3 配置urls.py4 表单验证5 模板层开发6 效果展示 1 模型层开发 用户数据表如下所示&#xff1a; FieldTypeExtraidintPrime Key & Auto Incrementpasswordvarchar(128)last_logindatetime(6)Allow Nu…

第八章 模型篇:transfer learning for computer vision

参考教程&#xff1a; transfer-learning transfer-learning tutorial 文章目录 transfer learning对卷积网络进行finetune把卷积网络作为特征提取器何时、如何进行fine tune 代码示例加载数据集构建模型fine-tune 模型模型作为feature extractor 定义train_loop和test_loop定…

Docker常见使用

Docker常见使用 1、Docker安装 ## 下载阿里源repo文件 $ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo $ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ yum clean …

工业相机的镜头如何选择?

相机的镜头如何计算&#xff0c;如果看公式的话&#xff0c;需要知道相机sensor的尺寸&#xff0c;相元的尺寸&#xff0c;计算起来数据也比较复杂&#xff0c;下面教大家一个简单的方法&#xff0c;就是如何借助镜头计算工具来使用。 巴斯勒相机的镜头选型地址 工业镜头选型…

操作系统之死锁详解

本文已收录于专栏 《自考》 目录 背景介绍死锁的前提死锁的概念死锁的分类死锁的产生原因条件 死锁的解决预防避免检测与恢复 死锁的实现总结提升 背景介绍 最近一直在做操作系统的测试题&#xff0c;在做题的过程中发现有很多地方涉及到了关于死锁的知识点。今天就回归课本来自…

哈工大计算机网络课程网络层协议详解之:网络地址转换NAT

哈工大计算机网络课程网络层协议详解之&#xff1a;网络地址转换NAT 文章目录 哈工大计算机网络课程网络层协议详解之&#xff1a;网络地址转换NAT网络地址转换&#xff08;NAT&#xff09;NAT实现原理NAT穿透问题NAT穿透问题的解决方案 上一节中&#xff0c;我们在DHCP协议中介…

【人脸检测——基于机器学习4】HOG特征

前言 HOG特征的全称是Histograms of Oriented Gradients,基于HOG特征的人脸识别算法主要包括HOG特征提取和目标检测,该算法的流程图如下图所示。本文主要讲HOG特征提取。 HOG特征的组成 Cell:将一幅图片划分为若干个cell(如上图绿色框所示),每个cell为8*8像素 Block:选…

【力扣刷题 | 第十四天】

目录 前言&#xff1a; 7. 整数反转 - 力扣&#xff08;LeetCode&#xff09; 面试题 16.05. 阶乘尾数 - 力扣&#xff08;LeetCode&#xff09; 总结; 前言&#xff1a; 今天仍然是无固定类型刷题&#xff0c; 7. 整数反转 - 力扣&#xff08;LeetCode&#xff09; 给你…

Android大图加载优化方案,避免程序OOM

我们在编写Android程序的时候经常要用到许多图片&#xff0c;不同图片总是会有不同的形状、不同的大小&#xff0c;但在大多数情况下&#xff0c;这些图片都会大于我们程序所需要的大小。比如微博长图&#xff0c;海报等等。所以我们就要对图片进行局部显示。 大图加载基本需求…

Redis入门(5)-set

Redis中set的元素具有无序性与不可重复性 1.sadd key member[member] 添加元素&#xff0c;若元素存在返回0若不存在则添加 sadd DB mysql oracle sadd DB mysql sadd DB db22.smembers key 查看set中所有元素 smembers DB3.sismember key member 判断元素在set中是否存…