WPF .NET 7.0学习整理(一)
参照文档进行不系统的整理,看到那写到那O.o
依赖属性
DependencyProperty:使用专有字段支持属性的标准模式的替代方法。
DependencyObject:定义了可以注册和拥有依赖属性的基类。
public static readonly DependencyProperty IsSpinningProperty = DependencyProperty.Register("IsSpinning", typeof(bool),typeof(MainWindow));public bool IsSpinning
{get => (bool)GetValue(IsSpinningProperty);set => SetValue(IsSpinningProperty, value);
}
属性及其支持性 DependencyProperty 字段的命名约定非常重要。 字段总是与属性同名,但其后面追加了 Property 后缀。
个人注解:WPF简直是个神奇的软件,包括MVVM中,竟然是靠View和ViewModel命名差一个Model完成绑定,当然也可以指定绑定的位置。
小点:依赖属性包装器
不是附加属性的 WPF 依赖属性通过实现 get 和 set 访问器的 CLR 包装器进行公开。 get 和 set 访问器通过DependencyObject.GetValue 和 DependencyObject.SetValue 调用与底层属性系统交互,并以参数的形式传入依赖属性标识符。 依赖属性的使用者通常不会直接调用GetValue 或 SetValue,但如果要实现自定义依赖属性,则会在包装器中使用这些方法。
注册属性:
请在类的主体中(但在任何成员定义之外)调用 Register 方法。在以下示例中,Register 的第一个参数将依赖属性命名为 AquariumGraphic。
// Register a dependency property with the specified property name,
// property type, owner type, and property metadata. Store the dependency
// property identifier as a public static readonly member of the class.
public static readonly DependencyProperty AquariumGraphicProperty =DependencyProperty.Register(name: "AquariumGraphic",propertyType: typeof(Uri),ownerType: typeof(Aquarium),typeMetadata: new FrameworkPropertyMetadata(defaultValue: new Uri("http://www.contoso.com/aquarium-graphic.jpg"),flags: FrameworkPropertyMetadataOptions.AffectsRender,propertyChangedCallback: new PropertyChangedCallback(OnUriChanged)));// Declare a read-write property wrapper.
public Uri AquariumGraphic
{get => (Uri)GetValue(AquariumGraphicProperty);set => SetValue(AquariumGraphicProperty, value);
}
依赖属性默认单向绑定OneWay,但是可设置为双向绑定TwoWay,或者直接设置默认绑定时TwoWay。
只读依赖属性
最经典的IsMouseOver
特点是
:无法赋值,不能绑定,不能用于动画,不能验证等;
主要目的是
结合属性触发器 (Trigger) 来实现样式的切换。
设置只读属性如下:
一、注册
// 只读属性的定义与注册//在元数据的实例中给这个只读属性设置默认值为 false。因为一开始并没有选择文件,当选择文件时,该实例获得为trueprivate static DependencyPropertyKey IsFilePickedPropertyKey = DependencyProperty.RegisterReadOnly("IsFilePicked", typeof(bool), typeof(FilePicker), new PropertyMetadata(false));public static DependencyProperty IsFilePickedProperty = IsFilePickedPropertyKey.DependencyProperty;
**注:**创建只读依赖属性的过程在许多方面类似于创建读写依赖属性,但有以下区别:
1.注册只读属性时,需要调用 RegisterReadOnly 而不是 Register。
2.实现 CLR 属性包装器时,请确保它没有公共 set 访问器。
3.RegisterReadOnly 返回 DependencyPropertyKey 而不是 DependencyProperty。 将 DependencyPropertyKey 存储在非公共类成员中
二、CLR包装
// 只读属性的包装
//由于这是个只读属性,所以只需要 get 段就可以public bool IsFilePicked{get { return (bool)GetValue(IsFilePickedProperty); }}
三、通过DependencyPropertyKey赋值
使用 SetValue 方法来赋值,SetValue 有两个重载,要为只读属性赋值,需使用第二个
SetValue(DependencyPropertyKey key, object value)
就像下边这个
SetValue(IsFilePickedPropertyKey, true);
四、应用部分
模板中增加以下 XAML 代码,即可:
<ControlTemplate.Triggers><Trigger Property="IsFilePicked" Value="True"><!--显示绿色边框--><Setter Property="BorderBrush" Value="Green" /><Setter Property="BorderThickness" Value="2" /></Trigger></ControlTemplate.Triggers>
依赖属性over 0.0
XAML
标记扩展
是一个 XAML 语言概念。 用于提供特性语法的值时,大括号({ 和 })表示标记扩展用法。 此用法指示 XAML 处理不要像通常那样将特性值视为文本字符串或者可转换为字符串的值。
WPF 应用编程中最常用的标记扩展是 Binding
(用于数据绑定表达式)以及资源引用 StaticResource 和 DynamicResource
。 通过使用标记扩展,即使属性通常不支持特性语法,也可以使用特性语法为属性提供值。 标记扩展经常使用中间表达式类型实现一些功能,例如,推迟值或引用仅在运行时才存在的其他对象。
such as:
<Window x:Class="index.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Window1" Height="100" Width="300"><Window.Resources><SolidColorBrush x:Key="MyBrush" Color="Gold"/><Style TargetType="Border" x:Key="PageBackground"><Setter Property="BorderBrush" Value="Blue"/><Setter Property="BorderThickness" Value="5" /></Style></Window.Resources><Border Style="{StaticResource PageBackground}"><StackPanel><TextBlock Text="Hello" /></StackPanel></Border>
</Window>
其中,一般将<Window.resources></Window.resources>
中的单独建一个xaml存贮,作为一种固定风格,方便其他页面的其他控件引用,简化代码量。
这里是一些xaml的扩展文档。
X:命名
x:Key:
为 ResourceDictionary(或其他框架中的类似字典概念)中的每个资源设置唯一的键。 在典型的 WPF 应用标记中的所有 x: 用法中,x:Key 可能占到 90%。
x:Class:
向为 XAML 页提供代码隐藏的类指定 CLR 命名空间和类名。 必须具有这样一个类才能支持每个 WPF 编程模型的代码隐藏,因此即使没有资源,也几乎总是能看到映射的 x:。
x:Name:
处理对象元素后,为运行时代码中存在的实例指定运行时对象名称。 通常,经常为 x:Name 使用 WPF 定义的等效属性。 此类属性特定映射到 CLR 后备属性,因此更便于进行应用编程,在应用编程中,经常使用运行时代码从初始化的 XAML 中查找命名元素。 最常见的此类属性是 FrameworkElement.Name。 在特定类型中不支持等效的 WPF 框架级 Name 属性时,仍然可以使用 x:Name。 某些动画方案中会发生这种情况。
x:Static:
启用一个返回静态值的引用,该静态值不是与 XAML 兼容的属性。
x:Type:
根据类型名称构造 Type 引用。 用于指定采用 Type(例如 Style.TargetType)的特性,但属性经常具有本机的字符串到 Type 的转换功能,因此使用 x:Type 标记扩展用法是可选的。
其他的
应用程序或程序集中的自定义类
XAML有两种方法:在代码隐藏或其他生成主 Windows Presentation Foundation (WPF) 应用程序的代码内和
在单独程序集中作为类(例如用作类库的可执行文件或 DLL)
(1)在应用程序中定义自定义类的优点在于此方法相对轻量,可减少在主应用程序可执行文件外引入单独程序集时遇到的部署和测试问题。
(2)创建类库的优点在于可在多个不同的应用程序间共享任意此类自定义类。 通过使用单独的库,更易于控制应用程序的版本控制问题,并可简化类创建过程,在此过程中,所需的类用法是作为 XAML 页面上的根元素。
无论定义在相同还是不同的程序集中,自定义类若要在 XAML 中用作元素,都需要在 CLR 命名空间和 XML 命名空间之间进行映射。
相关文章:
WPF .NET 7.0学习整理(一)
参照文档进行不系统的整理,看到那写到那O.o 依赖属性 DependencyProperty:使用专有字段支持属性的标准模式的替代方法。 DependencyObject:定义了可以注册和拥有依赖属性的基类。 public static readonly DependencyProperty IsSpinningPr…...
数据分析简介
判断采集数据的有效性和进行数据校准是数据处理中重要的步骤。以下是一些常见的方法和步骤可以帮助你进行数据有效性的判断和数据校准: 数据有效性判断: 数据范围:检查数据是否落在合理的范围内。根据具体情况,确定真实数据的上下限ÿ…...

解读未知:文本识别算法的突破与实际应用
解读未知:文本识别算法的突破与实际应用 1.文本识别算法理论 背景介绍 文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个固定区域的的文本内容。在OCR的两阶段方法里,它接在文本检测后面…...

[第七届蓝帽杯全国大学生网络安全技能大赛 蓝帽杯 2023]——Web方向部分题 详细Writeup
Web LovePHP 你真的熟悉PHP吗? 源码如下 <?php class Saferman{public $check True;public function __destruct(){if($this->check True){file($_GET[secret]);}}public function __wakeup(){$this->checkFalse;} } if(isset($_GET[my_secret.flag]…...

el-backtop返回顶部的使用
2023.8.26今天我学习了如何使用el-backtop组件进行返回页面顶部的效果,效果如: <el-backtop class"el-backtop"style"right: 20px; bottom: 150px;"><i class"el-icon-caret-top"></i></el-backtop&…...

Go 官方标准编译器中所做的优化
本文是对#102 Go 官方标准编译器中实现的优化集锦汇总[1] 内容的记录与总结. 优化1-4: 字符串和字节切片之间的转化 1.紧跟range关键字的 从字符串到字节切片的转换; package mainimport ( "fmt" "strings" "testing")var cs10086 s…...

C语言程序设计——小学生计算机辅助教学系统
题目:小学生计算机辅助教学系统 编写一个程序,帮助小学生学习乘法。然后判断学生输入的答案对错与否,按下列任务要求以循序渐进的方式分别编写对应的程序并调试。 任务1 程序首先随机产生两个1—10之间的正整数,在屏幕上打印出问题…...
SQL自动递增的列恢复至从0开始
在许多数据库管理系统中,当你删除表格中的所有数据时,自动递增的列(也称为自增列、标识列或序列)的计数器通常不会重置为 0。这是出于性能和数据完整性方面的考虑,以避免因删除数据而导致的自增列值冲突。即使你删除了…...
介绍一下CDN
CDN(内容分发网络,Content Delivery Network)是一个由多个服务器组成的分布式网络,它的目的是将内容高效地传送到用户。下面是CDN的工作原理及其主要特点: 内容分发:当用户首次请求某一特定内容时ÿ…...

2023年最新 Github Pages 使用手册
参考:GitHub Pages 快速入门 1、什么是 Github Pages GitHub Pages 是一项静态站点托管服务,它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件,(可选)通过构建过程运行文件,然后发布网站。 可…...

docker 安装 Nginx
1、下载 docker pull nginx:latest 2、本地创建管理目录 mkdir -p /var/docker/nginx/conf mkdir -p /var/docker/nginx/log mkdir -p /var/docker/nginx/html 3、将容器中的相应文件复制到管理目录中 /usr/docker/nginx docker run --name nginx -p 80:80 -d nginxdocke…...

【NLP的python库(01/4) 】: NLTK
一、说明 NLTK是一个复杂的库。自 2009 年以来不断发展,它支持所有经典的 NLP 任务,从标记化、词干提取、词性标记,包括语义索引和依赖关系解析。它还具有一组丰富的附加功能,例如内置语料库,NLP任务的不同模型以及与S…...

Java IDEA Web 项目 1、创建
环境: IEDA 版本:2023.2 JDK:1.8 Tomcat:apache-tomcat-9.0.58 maven:尚未研究 自行完成 IDEA、JDK、Tomcat等安装配置。 创建项目: IDEA -> New Project 选择 Jakarta EE Template:选择…...

leetcode316. 去除重复字母(单调栈 - java)
去除重复字母 题目描述单调栈代码演示进阶优化 上期经典 题目描述 难度 - 中等 leetcode316. 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对…...
零散笔记:《Spring实战》Thymeleaf
1、Thymeleaf模板就是增加一些额外元素属性的HTML,这些属性能够指导模板如何渲染request数据。 <p th:test "${message}">placeholder message</p> th我推测是中文的”替换“。 2、th:each,迭代元素集合。 <div th:each &qu…...

WordArt Designer:基于用户驱动与大语言模型的艺术字生成
AIGC推荐 FaceChain人物写真开源项目,支持风格与穿着自定义,登顶github趋势榜首! 前言 本文介绍了一个基于用户驱动,依赖于大型语言模型(LLMs)的艺术字生成框架,WordArt Designer。 该系统包含四个关键模块:LLM引擎、…...

【C进阶】深度剖析数据在内存中的存储
目录 一、数据类型的介绍 1.类型的意义: 2.类型的基本分类 二、整形在内存中的存储 1.原码 反码 补码 2.大小端介绍 3.练习 三、浮点型在内存中的存储 1.一个例子 2.浮点数存储规则 一、数据类型的介绍 前面我们已经学习了基本的内置类型以及他们所占存储…...

TortoiseGit安装
一、安装Git环境 Git-2.42.0-64-bit.exe (访问密码: 1666)https://url48.ctfile.com/f/33868548-924037167-76e273?p1666 二、安装TortoiseGit TortoiseGit-2.14.0.1-64bit.msi (访问密码: 1666)https://url48.ctfile.com/f/33868548-924037173-d395c7?p1666 三、安装T…...

巨人互动|游戏出海游戏出海的趋势如何
随着全球游戏市场的不断扩大和消费者需求的多元化,游戏出海作为游戏行业的重要战略之一,正面临着新的发展趋势。本文小编将讲讲游戏出海的趋势,探讨一下未来游戏出海的发展方向与前景。 巨人互动|游戏出海&2023国内游戏厂商加快“出海”发…...

k8s 安装 istio(二)
3.3 部署服务网格调用链检测工具 Jaeger 部署 Jaeger 服务 kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.16/samples/addons/jaeger.yaml 创建 jaeger-vs.yaml 文件 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...

Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...