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

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.xdnf.cn/news/19300.html

相关文章:

  • Odoo与Django 的区别是什么?
  • ADFS 和 OAuth 的区别
  • 龙迅#LT7641GX适用于四路HDMI2.1/DP/TPYE-C转HDMI2.1混切应用,分辨率高达8K60HZ!
  • 线性表和顺序表
  • 数据存储——数据库
  • 安卓开发---SimpleAdapter
  • ansible的playbook练习题
  • shell学习(二)
  • 【完整源码+数据集+部署教程】传送带建筑材料识别系统源码和数据集:改进yolo11-AFPN-P345
  • 网站酷炫换皮肤?——PC 端 H5 换肤方案实战分享
  • PCIe 6.0 TLP结构解析:深入理解事务层数据包的设计与实现
  • IDEA编译报错:Error:(3, 28) java: 程序包com.alibaba.fastjson不存在
  • 图解帕累托前沿(pareto frontier)
  • 海康相机开发---设备布防(Setup Alarm)
  • python 解码 视频解码
  • RAG教程6:cohere rerank重排
  • openEuler系统实现MySQL数据库主从复制
  • 基于站点、模式、遥感多源降水数据融合与评估;Python驱动下,从基础处理、机器学习建模到气候态产品生成的全流程解析
  • 2.ImGui-搭建一个外部绘制的窗口环境(使用ImGui绘制一个空白窗口)
  • python 2025/7/28
  • 03.《交换的底层逻辑:从基础到应用》
  • edgeone 边缘加速平台使用“坑”记录
  • 洛谷P1090 [NOIP 2004 提高组] 合并果子 详解
  • 三维动画渲染农场哪家便宜?
  • 【69页PPT】智慧方案智慧医疗产业园区规划设计方案(附下载方式)
  • vscode优化合集 - Visual Studio Code
  • 【51单片机】【protues仿真】 基于51单片机叫号系统
  • NLP:驱动人工智能迈向 “理解” 与 “对话” 的核心引擎
  • 香港电讯与Microsoft香港推出新世代“Teams Phone” 解决方案
  • 理想汽车智驾方案介绍专题 3 MoE+Sparse Attention 高效结构解析