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

wpf之附加属性

前言

附加属性是 WPF 中一个非常强大和独特的概念。简单来说,它允许一个对象为另一个在其本身类定义中未定义的属性赋值。

1、定义附加属性

定义一个Watermark的附加属性,该属性的作用是将TextBox的附加属性改变时,TextBox的字体颜色改成灰色。

 class WatermarkService{// 1. 注册一个名为 Watermark 的附加属性public static readonly DependencyProperty WatermarkProperty =DependencyProperty.RegisterAttached("Watermark", // 属性名typeof(string), // 属性类型typeof(WatermarkService), // 所有者类型new PropertyMetadata(string.Empty, OnWatermarkChanged) // 元数据,包含默认值和回调方法);// 2. 标准的 Get 访问器public static string GetWatermark(DependencyObject obj){return (string)obj.GetValue(WatermarkProperty);}// 3. 标准的 Set 访问器public static void SetWatermark(DependencyObject obj, string value){obj.SetValue(WatermarkProperty, value);}// 4. 属性值改变时的回调方法private static void OnWatermarkChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){// 我们期望这个属性只用在 TextBox 上if (d is TextBox textBox){string newWatermark = (string)e.NewValue;string oldWatermark = (string)e.OldValue;// 这里可以实现具体的逻辑,例如:// - 当 TextBox 文本为空时显示水印// - 当获得焦点时隐藏水印// 通常需要订阅 GotFocus、LostFocus 等事件。// 这是一个简化示例,实际实现会更复杂。if (string.IsNullOrEmpty(textBox.Text)){textBox.Text = newWatermark;textBox.Foreground = Brushes.White; // 将水印文字设置为灰色}}}}

2、xaml代码

<Window x:Class="wpf之附加属性.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpf之附加属性"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><StackPanel Orientation="Vertical" ><Button Height=" 100" Background="Blue"  /><TextBox x:Name="tbx_test"  Background="Red"  local:WatermarkService.Watermark="我是附加属性"Width="200" Height="30"/></StackPanel ></Grid>
</Window>

3、运行效果

在这里插入图片描述

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》
2、《C#与PLC通信从入门到精通 》
3、《C# Modbus通信从入门到精通》
4、《C#Socket通信从入门到精通 》
5、《C# MES通信从入门到精通》
6、《winform控件从入门到精通》
7、《C#操作MySql数据库从入门到精通》

http://www.dtcms.com/a/357928.html

相关文章:

  • 学习嵌入式第四十一天
  • 【电力电子】MCP602运算放大器测交流电压(120VAC/230VAC),带直流偏置2.5V,比例:133.5:1
  • 【杂谈】-混沌理论能否赋予机器差异化思考能力?
  • 华为 HarmonyOS 代表未来
  • 初学者如何学习项目管理
  • Citrix 零日漏洞自五月起遭积极利用
  • 爱普生L3255打印机故障记录
  • Pregel 与 LangGraph:从分布式图计算到现代 AI 智能体的架构演进与 API 深度解析
  • 多教师语言感知知识蒸馏:提升多语种语音情绪识别的新方法
  • 区块链存证技术:如何让电子证据成为“铁证
  • HarmonyOS应用的多Module设计机制:构建灵活高效的应用程序
  • IPv6过渡技术6VPE
  • Kotlin Android 水印功能实现指南:使用 Watermark 库
  • java agent 字节码增强demo实现,无修改增强服务
  • 从零开始的python学习——注释与运算符
  • Codeforces Round 1033 (Div. 2) and CodeNite 2025 vp补题
  • Oracle 数据库性能调优:从瓶颈诊断到精准优化之道
  • DeepSeek应用技巧-通过MCP打造数据分析助手
  • 现代 Linux 发行版为何忽略Shell脚本的SUID位?
  • 深入 MySQL SELECT 查询
  • windows 谷歌浏览器把英文改成中文
  • 面试 八股文 经典题目 - Mysql部分(一)
  • 数据结构--栈(Stack) 队列(Queue)
  • 从单机到分布式:Python 爬虫架构演进
  • kmp 算法
  • 【MLLM】多模态理解Ovis2.5模型架构和训练流程
  • 模式组合应用-组合模式
  • 加速智能经济发展:如何助力“人工智能+”战略在实时视频领域的落地
  • 时间轴组件开发:实现灵活的时间范围选择
  • More Effective C++ 条款17: 考虑使用缓式评估(Consider Using Lazy Evaluation)