WPF Treeview开启虚拟化后如何找到TreeViewItem
用VirtualizingStackPanel的BringIndexIntoViewPublic方法就好,没必要像微软给的例子那样还要继承一个VirtualizingStackPanel
/// <summary>
/// Recursively search for an item in this subtree.
/// </summary>
/// <param name="container">
/// The parent ItemsControl. This can be a TreeView or a TreeViewItem.
/// </param>
/// <param name="item">
/// The item to search for.
/// </param>
/// <returns>
/// The TreeViewItem that contains the specified item.
/// </returns>
private TreeViewItem GetTreeViewItem(ItemsControl container, object item)
{if (container != null){if (container.DataContext == item){return container as TreeViewItem;}// Expand the current containerif (container is TreeViewItem && !((TreeViewItem)container).IsExpanded){container.SetValue(TreeViewItem.IsExpandedProperty, true);}// Try to generate the ItemsPresenter and the ItemsPanel.// by calling ApplyTemplate. Note that in the// virtualizing case even if the item is marked// expanded we still need to do this step in order to// regenerate the visuals because they may have been virtualized away.container.ApplyTemplate();ItemsPresenter itemsPresenter =(ItemsPresenter)container.Template.FindName("ItemsHost", container);if (itemsPresenter != null){itemsPresenter.ApplyTemplate();}else{// The Tree template has not named the ItemsPresenter,// so walk the descendents and find the child.itemsPresenter = FindVisualChild<ItemsPresenter>(container);if (itemsPresenter == null){container.UpdateLayout();itemsPresenter = FindVisualChild<ItemsPresenter>(container);}}Panel itemsHostPanel = (Panel)VisualTreeHelper.GetChild(itemsPresenter, 0);// Ensure that the generator for this panel has been created.UIElementCollection children = itemsHostPanel.Children;VirtualizingStackPanel virtualizingPanel =itemsHostPanel as VirtualizingStackPanel;for (int i = 0, count = container.Items.Count; i < count; i++){TreeViewItem subContainer;if (virtualizingPanel != null){// Bring the item into view so// that the container will be generated.virtualizingPanel.BringIndexIntoViewPublic(i);subContainer =(TreeViewItem)container.ItemContainerGenerator.ContainerFromIndex(i);}else{subContainer =(TreeViewItem)container.ItemContainerGenerator.ContainerFromIndex(i);// Bring the item into view to maintain the// same behavior as with a virtualizing panel.subContainer.BringIntoView();}if (subContainer != null){// Search the next level for the object.TreeViewItem resultContainer = GetTreeViewItem(subContainer, item);if (resultContainer != null){return resultContainer;}else{// The object is not under this TreeViewItem// so collapse it.subContainer.IsExpanded = false;}}}}return null;
}/// <summary>
/// Search for an element of a certain type in the visual tree.
/// </summary>
/// <typeparam name="T">The type of element to find.</typeparam>
/// <param name="visual">The parent element.</param>
/// <returns></returns>
private T FindVisualChild<T>(Visual visual) where T : Visual
{for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++){Visual child = (Visual)VisualTreeHelper.GetChild(visual, i);if (child != null){T correctlyTyped = child as T;if (correctlyTyped != null){return correctlyTyped;}T descendent = FindVisualChild<T>(child);if (descendent != null){return descendent;}}}return null;
}
相关文章:
WPF Treeview开启虚拟化后如何找到TreeViewItem
用VirtualizingStackPanel的BringIndexIntoViewPublic方法就好,没必要像微软给的例子那样还要继承一个VirtualizingStackPanel /// <summary> /// Recursively search for an item in this subtree. /// </summary> /// <param name"container…...
给python初学者的一些建议
写在开篇 关于Python,可以这么说,这几年借着数据科学、机器学习与人工智能的东风,Python 老树开新花,在风口浪尖上居高不下。 Python 之所以这么受大家的青睐,是因为它语言简洁,上手容易,让非…...
【Python学习手册(第四版)】学习笔记17-作用域
个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文介绍Python作用域,介绍了变量名解析的LEGB原则,以及内置作用域,全局作用域global语句,嵌套作用域及nonlocal语…...
大语言模型(LLM)文本预处理实战
大语言模型(LLM)文本预处理实战 文章目录 大语言模型(LLM)文本预处理实战2.1 理解词嵌入2.2 文本分词2.3 将 token 转换为 token ID2.4 添加特殊上下文 token2.5 字节对编码 (BytePair Encoding, BPE)2.6 使用滑动窗口进行数据采样…...
宠物健康新守护:智能听诊器的家庭应用
宠物已成为我们情感的寄托和生活的一部分,为宠物的健康守护带来了科技的温度。 科技与关怀结合 这款智能听诊器,以其科技感和关怀精神,为宠物的健康监测提供了全新的视角。 家庭友好设计:考虑到家庭使用环境,智能听…...
六、go函数
函数在任何语言中并不难理解,但是不论是有几年开发经验的人,真正想要写好一个函数并不是那么容易的 1、go语言中函数结构 func main() {fmt.Println(isEven(2)) } func isEven(x int) bool {return x%2 0 }(这里我写了一个简单的判断是否是…...
高原型垂直起降高速无人机技术详解
1. 技术概述 高原型垂直起降高速无人机(High-Altitude Vertical Take-off and Landing High-Speed Unmanned Aerial Vehicle, HAVTHS UAV)是针对高原复杂环境设计的一种先进无人机系统。它结合了垂直起降的灵活性与高速飞行的能力,能够克服高…...
Selenium + Python 自动化测试10(unittest概念)
我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 上几篇我们讨论了元素的定位方法、操作方法以及一些特殊元素的操作。 在实际的测试项目组中每个模块会写多条案例,如第一条用例那里我们的登录。登录的话就可以有多…...
大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...
深度学习与图像修复:ADetailer插件在Stable Diffusion中的应用
文章目录 引言ADetailer插件介绍插件安装常用模型控制提示词参数配置参数详解 实践建议 示例插件的对比:1. ADetailer插件2. Photoshop插件(如Nik Collection)3. GIMP插件(如GMIC)4. Affinity Photo插件 结语 引言 无…...
【Pytorch】topk函数
topk 是 PyTorch 中的一个函数,用于从张量中选取最大(或最小)的 k 个元素及其对应的索引。其定义如下: values, indices torch.topk(input, k, dimNone, largestTrue, sortedTrue, *, outNone)参数说明 input (Tensor): 输入张…...
使用mybatis注解和xml映射执行javaWeb中增删改查等操作
Mapper接口 使用注解执行SQL语句操作和相应的Java抽象类(对于简单的增删改查使用注解) Mapper public interface EmpMapper {// 根据id删除员工信息Delete("delete from mybatis.emp where id#{id}")public int EmpDelete(Integer id);// 查…...
SpringBoot3 响应式编程
Spring Boot 3 中的响应式编程是一个重要的特性,它允许开发者构建非阻塞、异步和基于事件的应用程序,这对于处理高并发和实时数据流的应用场景尤为重要。以下是对Spring Boot 3响应式编程的详细解析: 一、响应式编程概述 响应式编程是一种编…...
【C++ 面试 - 基础题】每日 3 题(二)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...
Modelica建模,Modelica语言的学习,技术调研工作
Modelica建模,Modelica语言的学习,技术调研工作 参考资料: 苏州同元软控信息技术有限公司 - 同元 Modelica 再探冷却 modelica学习-CSDN博客 1、 Modelica简介 Modelica是由Modelica协会维护、免费开放的物理系统面向对象的统一建模语言规…...
Oracle数据字典之——v$lock 和v$locked_object
v$lock视图 v$lock视图列出当前系统持有的或正在申请的所有锁的情况,其主要字段说明如下: 11g如下: 字段名称类型说明ADDRRAW(8)锁定状态对象的地址KADDRRAW(8)锁的地址SIDNUMBER会话(SESSION)标识;TYPE…...
solidity 以太坊(Ether) 单位(很基础)
一个字面常数可以带一个后缀 wei, gwei 或 ether 来指定一个以太坊的数量, 其中没有后缀的以太数字被认为单位是wei。 在以太坊和许多其他基于以太坊的区块链系统中,以太币(Ether)是网络中的主要加密货币。 以太可以被…...
关于elementUI 分页 table 使用 toggleRowSelection
我出现问题的前提 在table表格第一页全选 ,第二页全选 回到第一页 点击按钮 取消 第一页,第二页我不要的勾选 初始实现 this.selectedPeraonal是表格 selection-change方法返回的值 handleSelectionChange(val) {this.selectedPeraonal val || []…...
K8s部署RocketMQ
准备工作 我是win电脑,本地安装了Podman,并使用Kind创建了一个K8s本地环境,并在 win 电脑上安装了 Helm。 部署RocketMQ 1. add rocketmq helm repo 2. deploy rocketmq cluster 3. verify the rocketmq cluster 4. Create Topic by api a…...
Linux服务管理-Nginx配置
静态解析主要解析html、css动态解析需要解析php 动态资源通过轮询分配到后端的Apache服务器处理 apache是同步阻塞,nginx是异步非阻塞...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
