示例:应用DependencyPropertyDescriptor监视依赖属性值的改变

一、目的:开发过程中,经常碰到使用别人的控件时有些属性改变没有对应的事件抛出,从而无法做处理。比如TextBlock当修改了IsEnabled属性我们可以用IsEnabledChanged事件去做对应的逻辑处理,那么如果有类似Background属性改变我想找对应的事件该如何处理,本文介绍DependencyPropertyDescriptor的应用,用该类可以监视到Background改变的处理


二、演示

可以看到,当修改TextBlock的Background属性时,Text的值也做出相应改变。 

三、环境


VS2022

四、实现

 

相关代码

定义一个ComboBox去修改Textblock的Backround属性

            <DockPanel>
                <ComboBox x:Name="cbb_dpd" DockPanel.Dock="Top">
                    <SolidColorBrush Color="Yellow"/>
                    <SolidColorBrush Color="Orange"/>
                    <SolidColorBrush Color="Purple"/>
                    <SolidColorBrush Color="Green"/>
                </ComboBox>
                <TextBlock x:Name="g_dpd" 
                           TextAlignment="Center" 
                           FontSize="100" 
                           VerticalAlignment="Stretch" 
                           Background="{Binding ElementName=cbb_dpd,Path=SelectedItem}"/>
            </DockPanel>

应用 DependencyPropertyDescriptor注册Textblock的Background改变时的响应事件

      public MainWindow()
      {
          InitializeComponent();

          var dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(TextBlock.BackgroundProperty, typeof(TextBlock));
          dependencyPropertyDescriptor.AddValueChanged(this.g_dpd, (s, e) =>
          {
              this.g_dpd.Text = this.g_dpd.Background.ToString();
          });
      }

核心代码是

首先,用一个依赖属性定义一个DependencyPropertyDescriptor

 var dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(TextBlock.BackgroundProperty, typeof(TextBlock));

之后,用DependencyPropertyDescriptor将想要监视的Textblock注册通知

          dependencyPropertyDescriptor.AddValueChanged(this.g_dpd, (s, e) =>
          {
              this.g_dpd.Text = this.g_dpd.Background.ToString();
          });

同理其他依赖属性改变也可以用此方法处理,比如常见的ListBox的ItemsSource属性改变没有通知,我们就可以用此方法处理如果数据源改变了我们要做一些刷新处理。

五、需要了解的知识点

DependencyPropertyDescriptor 类 (System.ComponentModel) | Microsoft Learn 

PropertyDescriptor 类 (System.ComponentModel) | Microsoft Learn 

DependencyProperty Class (System.Windows) | Microsoft Learn 

TextBlock 类 (System.Windows.Controls) | Microsoft Learn 

TextBlock.Background 属性 (System.Windows.Controls) | Microsoft Learn 

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

太湖远大毛利率下滑:研发费用率远低同行,募投项目合理性疑点重重

《港湾商业观察》黄懿 6月20日&#xff0c;浙江太湖远大新材料股份有限公司&#xff08;以下简称“太湖远大”&#xff0c;873743.NQ&#xff09;即将迎来过会。 2023年11月30日&#xff0c;太湖远大所提交的上市申请材料正式获北交所受理&#xff0c;保荐机构为招商证券&…

DataWorks Copilot:大模型时代数据开发的新范式

导读 DataWorks 是阿里云一站式智能化数据开发与治理平台&#xff0c;支持搭配MaxCompute/Hologres/AnalyticDB/StarRocks/EMR/CDH 等大数据引擎&#xff0c;为企业构建数据仓库、数据湖以及湖仓一体&#xff08;Lakehouse&#xff09;现代数据架构提供数据平台产品解决方案。…

数据结构_二叉树

目录 一、树型结构 二、二叉树 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.5 遍历二叉树 2.6 操作二叉树 总结 一、树型结构 树是一种非线性的数据结构&#xff0c;它是由 n(n>0) 个有限结点组成一个具有层次关系的集合&#xff0c;一棵 n 个…

程控漏电流测试电阻箱的应用

程控漏电流测试电阻箱是用于测量和控制电流的设备&#xff0c;广泛应用于电力系统、电子设备、自动化设备等领域。它的主要功能是通过改变电阻值来控制电流的大小&#xff0c;从而实现对设备的保护和控制。 程控漏电流测试电阻箱在电力系统中有着重要的应用&#xff0c;电力系统…

调教NewspaceGPT之GPT4o实战

NewspaceGPT地址&#xff1a;https://newspace.ai0.cn 需求一&#xff1a;我需要一个创意logo 我的问题 我觉得我的描述对一个设计人员来说时精准的&#xff0c;但是不具体的。 需求描述&#xff1a;我需要一个logo。 表现司法公正和司法数字化&#xff0c;人工智能化 。 Ne…

微信聊天记录导出为电脑文件实操教程(附代码)

写在前面 最近&#xff0c;微信中加的群有点多&#xff0c;信息根本看不过来。如果不看&#xff0c;怕遗漏了有价值的信息&#xff1b;如果一条条向上翻阅&#xff0c;实在是太麻烦。 有没有办法一键导出所有聊天记录&#xff1f; 一来翻阅更方便一点&#xff0c;二来还可以…

乐鑫esp32系列睡眠模式下蓝牙连接功耗测试,新支持ESP-C6,启明云端乐鑫代理商

本教程适用于ESP32-S3、ESP32-C3、ESP32-C6&#xff1b; 睡眠模式介绍 ESP32系列常见的休眠方式有三种&#xff0c;分别为Modem-sleep、Light-sleep 和 Deep-sleep。 Modem-sleep模式&#xff1a;CPU 正常工作&#xff0c;可以对时钟进行配置。 进入 Modem-sleep 模式后&…

康谋分享丨从CAN到CAN FD:ADTF在汽车网络中的应用

来源&#xff1a;康谋分享丨从CAN到CAN FD&#xff1a;ADTF在汽车网络中的应用 原文链接&#xff1a;https://mp.weixin.qq.com/s/qCrsXV0D8No3bH6QsgupHg 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; #CAN #CAN FD #ADTF 随着汽车电子技术的发展&#xff0c;车辆…

直播电商源码(直播带货,短视频带货,DIY首页,商城运营)

随着互联网技术的飞速发展&#xff0c;直播电商已成为数字营销的新宠儿。直播电商源码作为支撑这一商业模式的技术基础&#xff0c;其重要性不言而喻。本文将深入探讨直播电商源码的概念、功能以及在现代电商领域的应用。 直播电商源码概述 直播电商源码&#xff0c;简而言之…

【C++题解】1324 - 扩建鱼塘问题

问题&#xff1a;1324 - 扩建鱼塘问题 类型&#xff1a;分支问题 题目描述&#xff1a; 有一个尺寸为 mn 的矩形鱼塘&#xff0c;请问如果要把该鱼塘扩建为正方形&#xff0c;那么它的面积至少增加了多少平方米&#xff1f; 输入&#xff1a; 两个整数 m 和 n 。 输出&…

北京大学数字普惠金融指数(2011-2022年)

北京大学数字普惠金融指数&#xff08;2011-2022年&#xff09;&#xff0c;包含省市县三级数据 数据年限&#xff1a;省级、地级市&#xff08;2011-2022年&#xff09;&#xff1b;区县&#xff08;2014-2022年&#xff09; 数据格式&#xff1a;excel、pdf 数据来源&#xf…

作为老司机,网站啥调性,第一屏就看出来了,还需往里看么。

网站的第一屏指的是用户在打开网站时首先看到的内容区域。这个区域通常包括网站的头部、导航栏、主要的视觉元素和重要的信息。第一屏的设计和呈现方式会对用户的第一印象产生重要影响&#xff0c;因此它能够决定网站的整体调性。 以下是一些原因解释为什么第一屏决定了网站的整…

[SAP ABAP] MESSAGE消息处理

常用的MESSAGE命令的字符 信息类型描述EError 出现错误消息&#xff0c;应用程序在当前点暂停 WWarning 出现警告消息&#xff0c;用户必须按Enter键才能继续应用程序 IInformation 将打开一个弹出窗口&#xff0c;其中包含消息文本&#xff0c;用户必须按Enter键才能继续 SSu…

忘记 iPhone 密码:如果忘记密码,如何解锁 iPhone

为了提高个人数据的安全性&#xff0c;用户通常会为不同的帐户和设备创建不同的复杂密码。虽然较新的 iPhone 型号具有生物识别和面部解锁功能&#xff0c;但这些功能并不总是有效 - 如果您忘记了 iPhone 的密码&#xff0c;您可能会遇到麻烦。 iPhone 用户和 Android 用户一样…

Python12 列表推导式

1.什么是列表推导式 Python的列表推导式&#xff08;list comprehension&#xff09;是一种简洁的构建列表&#xff08;list&#xff09;的方法&#xff0c;它可以从一个现有的列表中根据某种指定的规则快速创建一个新列表。这种方法不仅代码更加简洁&#xff0c;执行效率也很…

ARM64汇编0C - inlinehook

本文是ARM64汇编系列的完结篇&#xff0c;主要利用前面学过的知识做一个小实验 完整系列博客地址&#xff1a;https://www.lyldalek.top/article/arm 这里只讨论 ARM64 下的 inlinehook&#xff0c;做一个简单的demo&#xff0c;只是抛砖引玉&#xff0c;有兴趣了解更多细节的可…

Treeselect是介绍及使用(梳理了我使用这个组件遇到的大部分问题)

介绍&#xff1a; Treeselect是一款基于Vue.js的树形选择器组件&#xff0c;可以快速地实现树形结构的选择功能。 这里梳理了我使用这个组件遇到的大部分问题 安装依赖&#xff1a; 首先&#xff0c;你需要在你的项目中安装Treeselect的依赖。这通常可以通过npm或yarn等来完…

多线程(总结黑马程序员)

一、什么是线程&#xff1f; 是一个程序内部的一条执行流程 多线程是什么&#xff1f; 多条线程由CPU负责调度执行 多线程的创建方式一&#xff1a;继承Thread类 //1.继承Thread类 public class MyThread extends Thread {//2.必须重写run方法Overridepublic void run() {…

理解HTTP请求格式

HTTP概念 HTTP全称HyperTextTransfer Protocol(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff1b;HTTP是一个客户端&#xff08;用户&#xff09;和服务端&#xff08;网站&#xff09;之间请求和响应的标准。 HTTP 协议是以 ASCII 码传输&…

FreeRtos-13资源管理

一、临界资源是什么 要独占式地访问临界资源,有3种方法: 1.公平竞争:比如使用互斥量,谁先获得互斥量谁就访问临界资源,这部分内容前面讲过。 谁要跟我抢,我就灭掉谁: 2.中断要跟我抢?我屏蔽中断 3.其他任务要跟我抢?我禁止调度器,不运行任务切换 二、暂停调度器…