当前位置: 首页 > 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 命名空间之间进行映射。

http://www.lryc.cn/news/146371.html

相关文章:

  • 数据分析简介
  • 解读未知:文本识别算法的突破与实际应用
  • [第七届蓝帽杯全国大学生网络安全技能大赛 蓝帽杯 2023]——Web方向部分题 详细Writeup
  • el-backtop返回顶部的使用
  • Go 官方标准编译器中所做的优化
  • C语言程序设计——小学生计算机辅助教学系统
  • SQL自动递增的列恢复至从0开始
  • 介绍一下CDN
  • 2023年最新 Github Pages 使用手册
  • docker 安装 Nginx
  • 【NLP的python库(01/4) 】: NLTK
  • Java IDEA Web 项目 1、创建
  • leetcode316. 去除重复字母(单调栈 - java)
  • 零散笔记:《Spring实战》Thymeleaf
  • WordArt Designer:基于用户驱动与大语言模型的艺术字生成
  • 【C进阶】深度剖析数据在内存中的存储
  • TortoiseGit安装
  • 巨人互动|游戏出海游戏出海的趋势如何
  • k8s 安装 istio(二)
  • Postman中参数区别及使用说明
  • 基于python+pyqt的opencv汽车分割系统
  • 游戏设计的主要部分
  • 架构师成长之路Redis第二篇|Redis配置文件参数讲解
  • jsp+servlet+mysql阳光网吧管理系统
  • Next.js基础语法
  • selenium进阶之web自动化项目框架搭建(Python版)
  • qt设计界面
  • 《C和指针》笔记12: 存储类型(自动变量、静态变量和寄存器变量)
  • 无限计算力:探索云计算的无限可能性
  • 【赋权算法】Python实现熵权法