WPF定义扩展属性和依赖属性

WPF扩展属性与依赖属性详解

一、依赖属性(Dependency Property)详解

1. 什么是依赖属性?

依赖属性是WPF框架的核心特性之一,它允许属性值依赖于:

  • 父元素的属性值(继承)
  • 样式和模板
  • 动画
  • 数据绑定
  • 资源查找

2. 依赖属性的特点

  1. ​属性值继承​​:子元素可以继承父元素的属性值
  2. ​属性值变更通知​​:自动通知UI更新
  3. ​属性值存储优化​​:只在值改变时存储实际值
  4. ​支持动画和样式​​:可直接用于动画和样式设置
  5. ​值强制转换​​:可通过验证和强制转换器控制值

3. 定义依赖属性的标准模式

 
using System.Windows;
using System.Windows.Controls;public class CustomControl : Control
{// 1. 定义依赖属性标识符public static readonly DependencyProperty MyPropertyProperty =DependencyProperty.Register(nameof(MyProperty),                // 属性名称typeof(string),                    // 属性类型typeof(CustomControl),             // 所属类型new PropertyMetadata("默认值"));   // 属性元数据// 2. 定义CLR包装属性public string MyProperty{get => (string)GetValue(MyPropertyProperty);set => SetValue(MyPropertyProperty, value);}
}

4. 依赖属性元数据选项

 
new PropertyMetadata(defaultValue: "默认值",                     // 默认值propertyChangedCallback: OnMyPropertyChanged, // 值改变回调coerceValueCallback: CoerceMyProperty,      // 值强制回调isAnimationProhibited: false                // 是否禁止动画
);// 值改变回调示例
private static void OnMyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{var control = (CustomControl)d;// 处理属性变化逻辑
}// 值强制回调示例
private static object CoerceMyProperty(DependencyObject d, object baseValue)
{var control = (CustomControl)d;if (baseValue is string str && str.Length > 10){return str.Substring(0, 10); // 限制最大长度为10}return baseValue;
}

5. 附加属性(Attached Property)

 
public class GridHelper
{// 定义附加属性public static readonly DependencyProperty ColumnProperty =DependencyProperty.RegisterAttached("Column",                          // 属性名称typeof(int),                       // 属性类型typeof(GridHelper),                // 所属类型new PropertyMetadata(0));          // 默认值// CLR包装器 - 获取方法public static int GetColumn(DependencyObject obj){return (int)obj.GetValue(ColumnProperty);}// CLR包装器 - 设置方法public static void SetColumn(DependencyObject obj, int value){obj.SetValue(ColumnProperty, value);}
}

XAML中使用:

 
<Grid><Button GridHelper.Column="1" Content="附加属性示例"/>
</Grid>

二、扩展属性(Attached Property)详解

1. 什么是扩展属性?

扩展属性(Attached Property)是一种特殊的依赖属性,它:

  • 可以附加到任何DependencyObject上
  • 由非所有者类型定义
  • 通常用于提供附加功能

2. 扩展属性的应用场景

  1. ​布局控制​​:如Grid.Row、Canvas.Left等
  2. ​行为附加​​:为现有控件添加新功能
  3. ​样式定制​​:在不修改原有控件的情况下添加新属性

3. 扩展属性实现示例

示例1:简单扩展属性
 
public class DragDropHelper
{// 定义扩展属性

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

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

相关文章

边缘函数:全栈开发的最后1毫秒性能革命

一、边缘计算的时空折叠术 1. 传统CDN vs. 智能边缘网络 全球电商平台实测数据&#xff1a; 场景云端处理延迟边缘处理延迟转化率提升搜索建议320ms8ms18%个性化推荐450ms12ms27%实时库存检查680ms9ms42%欺诈检测920ms15ms63% 二、边缘全栈架构的量子纠缠 1. 代码的时空分布…

Codeforces Round 1021 (Div. 2) D. Baggage Claim(建图)

每周五篇博客&#xff1a;&#xff08;4/5&#xff09; https://codeforces.com/contest/2098/problem/D 题意 每个机场都有一个行李索赔区&#xff0c;巴尔贝索沃机场也不例外。在某个时候&#xff0c;Sheremetyevo的一位管理员提出了一个不寻常的想法&#xff1a;将行李索…

LLM(大语言模型)技术的最新进展可总结

截至2025年4月26日&#xff0c;LLM&#xff08;大语言模型&#xff09;技术的最新进展可总结为以下关键方向&#xff1a; 1. 架构创新与性能突破 多模态能力深化&#xff1a;GPT-4o等模型通过统一架构支持文本、图像、音频和视频的跨模态推理&#xff0c;显著提升复杂场景下的…

黑马点评redis改 part 6

GEO数据结构 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0c;包含&a…

Spring_MVC 中的 JSON 数据处理与 REST 风格开发

Spring_MVC 中的 JSON 数据处理与 REST 风格开发 一、JSON 格式参数 1. 格式布置 依赖导入 为了处理 JSON 数据&#xff0c;需要在项目中引入 Jackson 库&#xff0c;它是 Spring_MVC 默认使用的 JSON 处理工具。 <dependency><groupId>com.fasterxml.jackson…

蓝桥杯 8. 移动距离

移动距离 原题目链接 题目描述 X 星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。楼房的编号为 1, 2, 3, ⋯⋯。 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 例如&#xff0c;当小区排号宽度为 6 时&#xff0c;排列如下&#xff1a; 1 2 …

第11章 安全网络架构和组件(一)

11.1 OSI 模型 协议可通过网络在计算机之间进行通信。 协议是一组规则和限制&#xff0c;用于定义数据如何通过网络介质&#xff08;如双绞线、无线传输等&#xff09;进行传输。 国际标准化组织(ISO)在20世纪70年代晚期开发了开放系统互连(OSI)参考模型。 11.1.1 OSI模型的…

文献分享:一种四价双特异性抗体的功能性和IgG样稳定性、药理学和可开发特性研究

背景 双特异性抗体&#xff08;bsAb&#xff09;是一种有前途的药物形式&#xff0c;能够同时结合相同或不同抗原上的两个不同表位。迄今为止&#xff0c;已有14个双特异性抗体药物获得上市批准&#xff0c;尽管取得了这些成功并且迄今为止设计了多种形式&#xff0c;但具有高…

英文中数字读法规则

以下是英文中数字读法的详细规则&#xff0c;涵盖基本数字、大数字、小数、分数、序数词及特殊场景&#xff08;如电话号码、年份、金额等&#xff09;&#xff1a; 一、基本数字&#xff08;0-10&#xff09; 数字基数词&#xff08;Cardinal&#xff09;序数词&#xff08;O…

32BIT的SPI主机控制

SPI传输位数可参数化配置。 SPI_MASTER: timescale 1ns / 1ps module SPI_Master #(parameter CLK_FREQ 50,parameter SPI_CLK 1000,parameter CPOL 0,parameter CPHA 0 )(input clk,input rst_n,input WrRdReq, //读/写数据请求output …

vue响应式原理——vue2和vue3的响应式实现区别

Vue的核心功能点之一是响应式&#xff1a;Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM。 简单的来说就是&#xff0c;页面的渲染效果会随着数据变化而变化&#xff0c;不用我们去手动操作DOM树进行数据变化后的渲染。为了实现这一目的&#xff0c;我们最简…

Kaamel白皮书:2025版COPPA落地实操指南

COPPA简介 《儿童在线隐私保护法案》&#xff08;COPPA&#xff09;于1998年在美国颁布&#xff0c;其最初的动因源于人们日益增长的对互联网上收集儿童个人信息的担忧。为了响应这一问题&#xff0c;联邦贸易委员会&#xff08;FTC&#xff09;被授权制定并执行相关法规。COP…

测试基础笔记第十四天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、字符串1.字符串2.字符串切片3.查找find&#xff08;&#xff09;4.去除两端空白字符 strip5.字符串转换大小写 lower、upper5.拆分 split()6.字符串的其他常见方…

什么是Lua模块?你会如何使用NGINX的Lua模块来定制请求处理流程?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Lua模块&#xff1f;你会如何使用NGINX的Lua模块来定制请求处理流程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Lua模块&#xff1f;你会如何使用NGINX的Lua模块来定制请求处理流程&#xff1f; 1000道 互联…

ubuntu扩展逻辑卷并调整文件系统大小步骤

安装好ubuntu如果没有调整磁盘空间,一般默认给你100G的空间,在用完时再调整也还来得及,下面是 ubuntu扩展逻辑卷并调整文件系统大小步骤&#xff1a; 1. 扩展逻辑卷 运行以下命令来扩展逻辑卷 /dev/ubuntu-vg/ubuntu-lv&#xff0c;使其使用卷组中所有未分配的空间&#xff…

复杂背景下无人机影像小目标检测:MPE-YOLO抗遮挡与抗背景干扰设计

目录 一、引言 二、挑战和贡献 密集小目标和遮挡 实时性要求与精度权衡 复杂背景 三、MPE-YOLO模型细节 多级特征集成器&#xff08;MFI&#xff09; 感知增强卷积&#xff08;PEC&#xff09; 增强范围C2f模块&#xff08;ES-C2f&#xff09; 四、Coovally AI模型训…

【C++】13.list的模拟实现

首先&#xff0c;我们需要把链表管理起来&#xff0c;也就是把一个个节点管理起来&#xff0c;但是每个节点的信息我们也需要管理&#xff0c;例如节点的前驱指针和后驱指针&#xff0c;以及节点的值&#xff0c;所以我们这里先封装两个类来管理节点和链表。 namespace Ro {te…

TinyVue v3.22.0 正式发布:深色模式上线!集成 UnoCSS 图标库!TypeScript 类型支持全面升级!

我们非常高兴地宣布&#xff0c;2025年4月7日&#xff0c;TinyVue发布了v3.22.0&#x1f389;。 本次 3.22.0 版本主要有以下重大变更&#xff1a; 支持深色模式增加基于 UnoCSS 的图标库更丰富的 TypeScript 类型声明支持 XSS 配置 详细的 Release Notes 请参考&#xff1a…

超级创新思路:基于CBAM-Transformer的强化学习时间序列预测模型(Python\matlab实现)

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴!需要完整代码可私信或评论! 本方案可用于医疗、金融、交通、零售、光伏功率预测、估计预测、天气预测、流量预测、故障检测等领域! 目录 首先声明,该模型为原创!原创!原创!且该思…

Apache Sqoop数据采集问题

Sqoop数据采集格式问题 一、Sqoop工作原理二、Sqoop命令格式三、Oracle数据采集格式问题四、Sqoop增量采集方案 Apache Sqoop是一款开源的工具&#xff0c;主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递&#xff0c;可以将一个关系型数据库&…