当前位置: 首页 > news >正文

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学习整理(一)

参照文档进行不系统的整理&#xff0c;看到那写到那O.o 依赖属性 DependencyProperty&#xff1a;使用专有字段支持属性的标准模式的替代方法。 DependencyObject&#xff1a;定义了可以注册和拥有依赖属性的基类。 public static readonly DependencyProperty IsSpinningPr…...

数据分析简介

判断采集数据的有效性和进行数据校准是数据处理中重要的步骤。以下是一些常见的方法和步骤可以帮助你进行数据有效性的判断和数据校准&#xff1a; 数据有效性判断: 数据范围&#xff1a;检查数据是否落在合理的范围内。根据具体情况&#xff0c;确定真实数据的上下限&#xff…...

解读未知:文本识别算法的突破与实际应用

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

[第七届蓝帽杯全国大学生网络安全技能大赛 蓝帽杯 2023]——Web方向部分题 详细Writeup

Web LovePHP 你真的熟悉PHP吗&#xff1f; 源码如下 <?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组件进行返回页面顶部的效果&#xff0c;效果如&#xff1a; <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关键字的 从字符串到字节切片的转换&#xff1b; package mainimport ( "fmt" "strings" "testing")var cs10086 s…...

C语言程序设计——小学生计算机辅助教学系统

题目&#xff1a;小学生计算机辅助教学系统 编写一个程序&#xff0c;帮助小学生学习乘法。然后判断学生输入的答案对错与否&#xff0c;按下列任务要求以循序渐进的方式分别编写对应的程序并调试。 任务1 程序首先随机产生两个1—10之间的正整数&#xff0c;在屏幕上打印出问题…...

SQL自动递增的列恢复至从0开始

在许多数据库管理系统中&#xff0c;当你删除表格中的所有数据时&#xff0c;自动递增的列&#xff08;也称为自增列、标识列或序列&#xff09;的计数器通常不会重置为 0。这是出于性能和数据完整性方面的考虑&#xff0c;以避免因删除数据而导致的自增列值冲突。即使你删除了…...

介绍一下CDN

CDN&#xff08;内容分发网络&#xff0c;Content Delivery Network&#xff09;是一个由多个服务器组成的分布式网络&#xff0c;它的目的是将内容高效地传送到用户。下面是CDN的工作原理及其主要特点&#xff1a; 内容分发&#xff1a;当用户首次请求某一特定内容时&#xff…...

2023年最新 Github Pages 使用手册

参考&#xff1a;GitHub Pages 快速入门 1、什么是 Github Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;&#xff08;可选&#xff09;通过构建过程运行文件&#xff0c;然后发布网站。 可…...

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 年以来不断发展&#xff0c;它支持所有经典的 NLP 任务&#xff0c;从标记化、词干提取、词性标记&#xff0c;包括语义索引和依赖关系解析。它还具有一组丰富的附加功能&#xff0c;例如内置语料库&#xff0c;NLP任务的不同模型以及与S…...

Java IDEA Web 项目 1、创建

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

leetcode316. 去除重复字母(单调栈 - java)

去除重复字母 题目描述单调栈代码演示进阶优化 上期经典 题目描述 难度 - 中等 leetcode316. 去除重复字母 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对…...

零散笔记:《Spring实战》Thymeleaf

1、Thymeleaf模板就是增加一些额外元素属性的HTML&#xff0c;这些属性能够指导模板如何渲染request数据。 <p th:test "${message}">placeholder message</p> th我推测是中文的”替换“。 2、th:each&#xff0c;迭代元素集合。 <div th:each &qu…...

WordArt Designer:基于用户驱动与大语言模型的艺术字生成

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

【C进阶】深度剖析数据在内存中的存储

目录 一、数据类型的介绍 1.类型的意义&#xff1a; 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…...

巨人互动|游戏出海游戏出海的趋势如何

随着全球游戏市场的不断扩大和消费者需求的多元化&#xff0c;游戏出海作为游戏行业的重要战略之一&#xff0c;正面临着新的发展趋势。本文小编将讲讲游戏出海的趋势&#xff0c;探讨一下未来游戏出海的发展方向与前景。 巨人互动|游戏出海&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…...

Postman中参数区别及使用说明

一、Params与Body 二者区别在于请求参数在http协议中位置不一样。Params 它会将参数放入url中以&#xff1f;区分以&拼接Body则是将请求参数放在请求体中 后端接受数据: 二、body中不同格式 2.1 multipart/form-data key - value 格式输入&#xff0c;主要特点是可以上…...

基于python+pyqt的opencv汽车分割系统

目录 一、实现和完整UI视频效果展示 主界面&#xff1a; 识别结果界面&#xff1a; 查看分割处理过程图片界面&#xff1a; 二、原理介绍&#xff1a; 加权灰度化 ​编辑 二值化 滤波降噪处理 锐化处理 边缘特征提取 图像分割 完整演示视频&#xff1a; 完整代码链…...

游戏设计的主要部分

游戏设计的主要部分 介绍 游戏设计是创建有趣、挑战性和令人满足的游戏体验的过程。它涵盖了许多方面&#xff0c;从概念开发到实际实施&#xff0c;以及最终的游戏测试和优化。游戏设计师需要考虑玩家的情感、技能挑战、故事情节、游戏世界等多个要素&#xff0c;以确保游戏…...

架构师成长之路Redis第二篇|Redis配置文件参数讲解

Redis.conf文件 官网Redis文档链接:Redis官网 官网Redis config配置文件参数讲解:https://redis.io/docs/management/config/ Redis.conf参考模板例子 : https://redis.io/docs/management/config-file/ Redis 可以使用内置的默认配置在没有配置文件的情况下启动,但是仅…...

jsp+servlet+mysql阳光网吧管理系统

项目介绍&#xff1a; 本系统使用jspservletmysql开发的阳光网吧管理系统&#xff0c;纯手工敲打&#xff0c;系统管理员和用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;修改个人信息、修改密码&#xff1b;机房类型管理&#xff1b;机房管理&#xff1b;机位…...

Next.js基础语法

Next.js 目录结构 入口App组件&#xff08;_app.tsx&#xff09; _app.tsx是项目的入口组件&#xff0c;主要作用&#xff1a; 可以扩展自定义的布局&#xff08;Layout&#xff09;引入全局的样式文件引入Redux状态管理引入主题组件等等全局监听客户端路由的切换 ts.config…...

selenium进阶之web自动化项目框架搭建(Python版)

web自动化项目框架搭建 1、项目结构 web自动化框架的设计&#xff0c;同接口自动化框架一样&#xff0c;采用分层设计。 文件或目录说明common常用模块&#xff0c;常用的一些函数封装testcases用例模块&#xff0c;所有的测试用例test_data用例数据logs日志目录reports报告s…...

qt设计界面

widget.h #ifndef WIDGET_H #define WIDGET_H //防止文件重复包含#include <QWidget> //QWidget类所在的头文件&#xff0c;父类头文件 #include<QIcon> #include<QPushButton> …...

《C和指针》笔记12: 存储类型(自动变量、静态变量和寄存器变量)

文章目录 1. 自动变量&#xff08;auto&#xff09;1.1 自动变量的初始化 2. 静态变量&#xff08;static&#xff09;2.1 静态变量的初始化 3. 寄存器变量&#xff08;register&#xff09; 1. 自动变量&#xff08;auto&#xff09; 在代码块内部声明的变量的缺省存储类型是…...

无限计算力:探索云计算的无限可能性

这里写目录标题 前言云计算介绍服务模型&#xff1a; 应用领域&#xff1a;云计算主要体现在生活中的地方云计算未来发展的方向 前言 云计算是一种基于互联网的计算模型&#xff0c;通过它可以实现资源的共享、存储、管理和处理。它已经成为许多个人、企业和组织的重要技术基础…...