WPF 利用视觉树获取指定名称对象、指定类型对象、以及判断是否有验证错误
1.利用视觉树获取指定名称对象
/// <summary>
/// Finds a Child of a given item in the visual tree.
/// </summary>
/// <param name="parent">A direct parent of the queried item.</param>
/// <typeparam name="T">The type of the queried item.</typeparam>
/// <param name="childName">x:Name or Name of child. </param>
/// <returns>The first parent item that matches the submitted type parameter.
/// If not matching item can be found,
/// a null parent is being returned.</returns>
public static T GetChildWithName<T>(this DependencyObject parent, string childName)where T : DependencyObject
{// Confirm parent and childName are valid.if (parent == null) return null;T foundChild = null;int childrenCount = VisualTreeHelper.GetChildrenCount(parent);for (int i = 0; i < childrenCount; i++){var child = VisualTreeHelper.GetChild(parent, i);// If the child is not of the request child type childT childType = child as T;if (childType == null){// recursively drill down the treefoundChild = GetChildWithName<T>(child, childName);// If the child is found, break so we do not overwrite the found child.if (foundChild != null) break;}else if (!string.IsNullOrEmpty(childName)){var frameworkElement = child as FrameworkElement;// If the child's name is set for searchif (frameworkElement != null && frameworkElement.Name == childName){// if the child's name is of the request namefoundChild = (T)child;break;}}else{// child element found.foundChild = (T)child;break;}}return foundChild;
}
2.返回指定类型的子对象
比如:在一个Grid内部有很多TextBox/ComboBox ,需要获取这个控件对象。
var children=Grid.GetChildren(new List<Type>(){ typeof(TextBox),typeof(ComboBox)});
/// <summary>
/// 返回指定类型的子对象
/// </summary>
/// <param name="p_element"></param>
/// <param name="includeTypes"></param>
/// <returns></returns>
public static IEnumerable<UIElement> GetChildren(this DependencyObject p_element, List<Type> includeTypes)
{for (int i = 0; i < VisualTreeHelper.GetChildrenCount(p_element); i++){var child = VisualTreeHelper.GetChild(p_element, i) as UIElement;if (child == null){continue;}Type type = child.GetType();if (includeTypes.Contains(type)){yield return child;}else{foreach (var c in child.GetChildren(includeTypes)){yield return c;}}}
}
3.获取UI对象(UserControl)内部是否存在验证错误
string errorMsg=string.Empty;
if(UserControl.GetChildrenValidationHasError<TextBox>(ref errorMsg))
{
//UserControl 内部的TextBox 有验证错误
MessageBox.Show(errorMsg);//提示错误消息
}
/// <summary>
/// 获取当前DependencyObject(含特定类型子对象)是否存在Validation错误
/// </summary>
/// <param name="p_element"></param>
/// <param name="errorMsg"></param>
/// <returns></returns>
public static bool GetChildrenValidationHasError<T>(this DependencyObject p_element, ref string errorMsg) where T : UIElement
{var children = GetChildren<T>(p_element);foreach (var child in children){if (CheckDependencyObjectHasError(child, ref errorMsg)){return true;}}return false;
}/// <summary>
/// 获取当前DependencyObject(含所有UI子对象)是否存在Validation错误
/// </summary>
/// <param name="p_element"></param>
/// <param name="errorMsg"></param>
/// <returns></returns>
public static bool GetChildrenValidationHasError(this DependencyObject p_element, List<Type> includeTypes, ref string errorMsg)
{var children = GetChildren(p_element, includeTypes);foreach (var child in children){if (CheckDependencyObjectHasError(child, ref errorMsg)){return true;}}return false;
}/// <summary>
/// 获取当前DependencyObject是否存在Validation错误
/// </summary>
/// <param name="child"></param>
/// <param name="errorMsg"></param>
/// <returns></returns>
public static bool CheckDependencyObjectHasError(this DependencyObject child, ref string errorMsg)
{if (child != null && Validation.GetHasError(child)){var errors = Validation.GetErrors(child);if (errors != null){errorMsg = string.Join("\n\r", errors.Select(m => m.ErrorContent).ToArray());}return true;}return false;
}
相关文章:
WPF 利用视觉树获取指定名称对象、指定类型对象、以及判断是否有验证错误
1.利用视觉树获取指定名称对象 /// <summary> /// Finds a Child of a given item in the visual tree. /// </summary> /// <param name"parent">A direct parent of the queried item.</param> /// <typeparam name"T">T…...
了解`re`模块的`split()`, `sub()`, `subn()`方法的作用
在Python中,re模块(即正则表达式模块)提供了强大的字符串处理能力,允许你通过模式匹配来执行复杂的文本搜索、替换和分割等操作。其中,split(), sub(), 和 subn() 方法是re模块中非常实用的几个函数,它们各…...
机器学习交通流量预测实现方案
机器学习交通流量预测实现方案 实现方案 1. 数据预处理 2. 模型选择 3. 模型训练与评估 代码实现 代码解释 小结 🎈边走、边悟🎈迟早会好 交通流量预测是机器学习在智能交通系统中的典型应用,通常用于预测道路上的车辆流量、速度和拥…...
QNN:基于QNN+example重构之后的yolov8det部署
QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是: 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换; 完成模型的低比特量化(int8),使其能够运行在高…...
Redis实战宝典:开发规范与最佳实践
目录标题 Key命名设计:可读性、可管理性、简介性Value设计:拒绝大key控制Key的生命周期:设定过期时间时间复杂度为O(n)的命令需要注意N的数量禁用命令:KEYS、FLUSHDB、FLUSHALL等不推荐使用事务删除大key设置合理的内存淘汰策略使…...
RPC的实现原理架构
RPC(Remote Procedure Call,远程过程调用)是一种允许程序调用位于不同地址空间或网络上的函数或方法的技术,尽管这些调用看起来像是本地调用。RPC 的实现极大地简化了分布式系统中的通信,避免了开发人员直接处理底层网…...
OpenXR Monado Hello_xr提交Frame
OpenXR Monado Hello_xr提交Frame @src/tests/hello_xr/openxr_program.cpp RenderFrame())xrWaitFrame(m_session, &frameWaitInfo, &frameState)xrBeginFrame(m_session, &frameBeginInfo)std::vector<XrCompositionLayerBaseHeader*> layers;std::vecto…...
huggingface快速下载模型及其配置
大家知道,每次进huggingface里面一个个手动下载文件然后再上传到我们的服务器是很麻烦的。其实huggingface提供了下载整个包的命令,很简单,如下: 1. 进入huggingface官网,随便搜索一个模型,点击右上角的三…...
虚幻5|不同骨骼受到不同伤害|小知识(2)
1.蓝图创建一个结构,B_BoneDamage 结构里添加一个浮点变量,表示伤害倍数 2.当我们创建了一个结构,就需要创建一个数据表格,数据表格可以选择对应的结构 不同骨骼不同倍数伤害,骨骼要对应骨骼网格体的名称 3.把我们br…...
达梦SQL 优化简介
目录 一、定位慢 SQL (一)开启跟踪日志记录 1.跟踪日志记录配置 (二)通过系统视图查看 1.SQL 记录配置 2.查询方式 二、SQL分析方法 (一)执行计划 1.概述 2.查看执行计划 (二&#x…...
题解:CF1070B Berkomnadzor
CF1070B Berkomnadzor 题解 解题思路 不难想到将 IP 地址转化为二进制后插入一个字典树中,转化后二进制的长度就是 x x x 的长度。我们需要记录每个串结尾的颜色,不妨设黑名单为 1 1 1,白名单为 0 0 0,初始时每个位置的颜色是…...
shell 学习笔记:数组
目录 1. 定义数组 2. 读取数组元素值 3. 关联数组 4. 在数组前加一个感叹号 ! 可以获取数组的所有键 5. 在数组前加一个井号 # 获取数组的长度 6. 数组初始化的时候,也可以用变量 7. 循环输出数组的方法 7.1 for循环输出 7.2 while循环输出 7.2.1 …...
计算机基础知识复习9.5
数据交换 电路交换:交换信息的两个主机之间简历专用通道,传输时延小,实时性强,效率低,无法纠正错误。 报文交换:信息拆分成小包(报文)大小无限制,有目的/源等信息提高利用率。有转…...
spark.sql
from pyspark.sql import SparkSession from pyspark.sql.functions import col, count, mean, rank, row_number, desc from pyspark.sql.window import Window from pyspark.sql.types import StructType, StructField, StringType, IntegerType# 初始化 SparkSession 对象 s…...
2024 数学建模高教社杯 国赛(A题)| “板凳龙”舞龙队 | 建模秘籍文章代码思路大全
铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用等距螺线,多目标规划等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍&am…...
kaggle注册收不到验证码、插件如何下载安装
综合这三个来看, 1.插件下载用的大佬给的分享链接 2.下载好压缩包以后需要解压缩 Header Editor插件网盘下载安装教程 - 哔哩哔哩 (bilibili.com) 3.安装插件时没找到crx文件,在浏览器插件界面点击“加载解压缩的扩展” 4.复制网址到插件里ÿ…...
k8s相关技术栈
文章目录 一、k8s技术栈核心组件常见工具和服务生态系统 二、k8s服务组件控制平面组件节点组件附加组件和服务 三、k8s 常见资源核心资源扩展资源 四、系列文档其他参考 一、k8s技术栈 Kubernetes(常被简称为 K8s,其中 “K” 代表 “Kubernetes” 的首字…...
uniapp h5项目页面中使用了iframe导致浏览器返回按键无法使用, 返回不了上一页.
uniapp h5项目页面中使用了iframe导致浏览器返回按键无法使用, 返回不了上一页. 在 UniApp 中使用 iframe 加载外部页面时,可能会遇到返回键行为不符合预期的问题。这是因为 iframe 本身可以包含多个页面的历史记录,而默认情况下,浏览器的返…...
《2024网络安全十大创新方向》
网络安全是创新驱动型产业,技术创新可以有效应对新的网络安全挑战;或是通过技术创新降低人力成本投入,提升企业运营效率。为推动行业技术创新、产品创新与应用创新,数说安全发布《2024年中国网络安全十大创新方向》,涵…...
深入解析反射型 XSS 与存储型 XSS:原理、危害与防范
在网络安全领域,跨站脚本攻击(XSS)是一种常见的安全漏洞。XSS 攻击可以分为反射型 XSS 和存储型 XSS 两种类型。本文将详细介绍这两种类型的 XSS 攻击的原理、危害和防范措施。 一、反射型 XSS 1、原理 反射型 XSS 攻击也称为非持久性 XSS …...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
