首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

wpf - ContainerFromItem在set方法中返回null,但在get方法中工作正常

WPF(Windows Presentation Foundation)是一种用于创建用户界面的框架,它提供了丰富的图形、多媒体和用户交互功能。在WPF中,ContainerFromItem是一个方法,用于从给定的项(Item)获取其容器(Container)。在set方法中返回null,但在get方法中工作正常的情况下,可能存在以下几种原因:

  1. 数据绑定问题:ContainerFromItem方法通常在数据绑定后才能正常工作。如果在set方法中调用ContainerFromItem,可能是因为数据绑定尚未完成,导致无法找到对应的容器。建议在确保数据绑定完成后再调用ContainerFromItem方法。
  2. 可视化树尚未完全加载:WPF的可视化树是用于呈现界面元素的结构,如果在set方法中调用ContainerFromItem,可能是因为可视化树尚未完全加载。建议在确保可视化树完全加载后再调用ContainerFromItem方法。
  3. UI线程问题:WPF中的UI操作通常需要在UI线程上执行,如果在set方法中调用ContainerFromItem,可能是因为在非UI线程上执行了该操作。建议使用Dispatcher.Invoke方法将操作调度到UI线程上执行。

综上所述,要解决在set方法中返回null但在get方法中工作正常的问题,可以确保数据绑定完成、可视化树完全加载,并在UI线程上执行ContainerFromItem方法。此外,还可以检查是否存在其他与数据绑定相关的问题,例如数据源是否正确设置、数据是否正确绑定到项等。

关于WPF的更多信息和相关产品介绍,您可以参考腾讯云的WPF文档和WPF相关产品:

  1. WPF文档:WPF 文档

请注意,以上答案仅供参考,具体解决方法可能因具体情况而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

技术总结:自动扩张WPF树型表格列宽

图1 问题描述 背景     树型控件GIX4系统已经被大量使用。这个控件是一年前其它同事在网上搜索到,再引入的。    ...模板以PART_起头的控件是控件的约定,具体内容见:《WPF Parts Control Model》。...再查看GridViewRowPresenter的源代码,发现它拥有以下属性:public GridViewColumnCollection Columns{get;set;}、internal UIElementCollection...InternalCollection{get;set;},进一步分析后,我猜测性地得出以下结论:GridViewRowPresenter.InternalCollection简单地包含了所有列的显示元素...方法,它把第一列的元素显示的长度变短,之前显示一段缩进的空白和Expander控件: protected override Size ArrangeOverride(Size arrangeSize

1.3K50

silverlight:ListBox如何取得DateTemplateItemsPanelTemplate的命名控件?

= null)             {                 ListBoxItem _selectedItem = (ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem...            }             ListBoxItem _firstItem = (ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem...} return null;         }     } public class TestData{public string d{set;get;}} } 这里我们借助VisualTreeHelper...sp,按正统处理方法还真是比较麻烦(各位可以google,baidu印证),这里给出一个很取巧的办法:         <StackPanel Orientation..._sp = sender as StackPanel;  } 这样,listItem_MouseLeftButtonDown中就能借助"_sp"正确引用到ItemsPanelTemplate的sp了

76350

看过这么多爆文,依旧走不好异步编程这条路?​

SynchronizationContext就是这类死锁的牛鼻子,大多数时候SynchronizationContext是异步编程后默默工作,但了解这个对象对于理解sync/await工作原理、解决死锁大有裨益...本文会解释: async/await工作机制 SynchronizationContext异步编程语法糖的意义 示例代码为什么会deadlock 1....此类实现的同步模型的目的是允许公共语言运行库的内部异步/同步操作使用不同的同步模型正常运行。...大家都知道:WinForm和WPF都有类似的原则:长耗时的任务在后台进行,将异步结果返回给UI线程 。(这难道就是ConfigureAwait方法默认传true的原因?)...,SynchronizationContext.Current=null AspNetSynchronizationContext维护了HttpContext.Current、用户身份和文化,但在ASP

80420

WPF 源代码 资源字典 ResourceDictionary 设置 Source 属性的逻辑

本文来和大家聊聊 WPF 里面在给 ResourceDictionary 设置 Source 属性时, WPF 框架里面做了哪些逻辑 默认添加 Source 时都是指定 WPF 自身的 XAML 资源字典..., this)); } } } 大概整理一下的 Source 的 set 方法里面的逻辑大概如下 // 前置属性判断 // 清空当前资源字典的所有元素...,也就是说 XAML 写的 Uri 将会被补全 _source = value; sourceUri = _source; Uri uri = BindUriHelper.GetResolvedUri...通过重写 WebRequest 的方法,实现了实际上没有走网络,而是返回了 PackWebResponse 对象, PackWebResponse 里面就是读取程序集的资源作为 Stream 返回 因此调用...WpfWebRequestHelper 的 CreateRequest 方法创建的 WebRequest 传入的是 uri 是一个本地的资源字典的时候,就是读取本地程序集资源返回 Stream 对象

1.9K10

一站式WPF--线程模型和Dispatcher

Dispatcher的新意   Winform的消息循环中, 为了线程安全,调用Control的Invoke或者BeginInvoke方法可以创建控件的线程上执行委托,方法返回值分别为object...; } public DispatcherPriority Priority { get; set; } public object Result { get; } public...其中比较有意思的是Priority属性,从字面来看,它表示了DispatcherOperation的优先级,而且提供了getset方法,也就是说,这个DispatcherOperation是可以在运行时更改优先级的...Dispatcher提供了BeginInvoke和Invoke两个方法,其中BeginInvoke的返回值是DispatcherOperation,Invoke函数的内部调用了BeginInvoke,也就是说...WPF,所有UI对象的基类为DispatcherObject,WPF在对所有DispatcherObject属性操作前进行了线程亲缘性校验,只有创建UI对象的线程才可以访问该UI对象。

22711

一站式WPF--线程模型和Dispatcher

Dispatcher的新意   Winform的消息循环中, 为了线程安全,调用Control的Invoke或者BeginInvoke方法可以创建控件的线程上执行委托,方法返回值分别为object...; } public DispatcherPriority Priority { get; set; } public object Result { get; } public...其中比较有意思的是Priority属性,从字面来看,它表示了DispatcherOperation的优先级,而且提供了getset方法,也就是说,这个DispatcherOperation是可以在运行时更改优先级的...Dispatcher提供了BeginInvoke和Invoke两个方法,其中BeginInvoke的返回值是DispatcherOperation,Invoke函数的内部调用了BeginInvoke,也就是说...WPF,所有UI对象的基类为DispatcherObject,WPF在对所有DispatcherObject属性操作前进行了线程亲缘性校验,只有创建UI对象的线程才可以访问该UI对象。

19420

WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 定义的属性也能使用绑定了

如果你写了一个 MarkupExtension XAML 当中使用,你会发现你 MarkupExtension 定时的属性是无法使用 XAML 绑定的,因为 MarkupExtension... Value 的 set 方法得到的 value 值是一个 Binding 对象,而不是正常依赖属性得到的绑定的结果;这意味着我们无法直接使用 Value 的值。...正常的依赖对象和依赖属性,这些本来都不需要我们自己来处理。...构造函数对 _valueExchanger 进行初始化,因为要传入 this 和一个实例方法 OnValueChanged,所以只能在构造函数初始化。...于是,绑定就这么一个普通的类型和一个普通的 CLR 属性中生效了,而且还获得了变更通知。 参考资料 本文没有任何参考资料,所有方法都是我(walterlv)的原创方法,因为真的找不到资料呀!

1.5K20

WPF 表单验证之 INotifyDataErrorlnfo 接口的使用示例

(《WPF 编程宝典》19.4.1 在数据对象中进行验证) 至于 ExceptionValidationRule,有个缺点就是开发调试时,遇到抛出的异常,会进入中断状态。...,以及一个错误变动事件 ErrorsChanged,如下: 《宝典》还有如下辅助的代码,一个错误列表,一个设置错误的方法 SetErrors,以及一个清除错误的方法 ClearErrors。...另外还重载了一个 GetErrors 方法,也是针对于同时处理几个属性的场景,并且之前返回类型为 List,相当于只是把错误列表的 key 去掉了,并没有整合,而我这个方法返回值为 List...set 块中加上具体的验证代码,我这里使用了之前添加的验证是否为空的方法 ValidateBlank: 另外,之前这两个操作数是 int 类型,如果保持的话,当删除内容,红框还是会出现,但是 set...然后是加法命令的改造,主要就是使用了我加的那两个方法(IsContainErrors 和 GetErrors),传递的都是两个操作数属性名称列表,如果有错误(为空),就弹窗提示,并拦截代码执行逻辑(直接返回跳出

88010

dotnet 读 WPF 源代码笔记 创建 SolidColorBrush 性能没有想象那么差

WPF ,常用的画刷里面有纯色画刷 SolidColorBrush 类。因为画刷会对应到 DirectX 的资源,因此之前我以为纯色画刷其实会比 Color 会占用更多的资源。... WPF Color 其实是结构体,创建速度快。而 SolidColorBrush 是画刷,会对应 DirectX 资源,相对来说性能会比较差。...但在通过阅读 WPF 的源代码,发现其实 SolidColorBrush 的创建的性能其实是特别好的,因此请不要担心创建了太多的纯色画刷类 WPF ,画刷 Brush 有很多实现,本文的内容是纯色画刷的实现... WPF 的机制,将会在 WPF 资源被使用的时候,如画刷被附加到某个元素上,在此元素渲染的时候(准确来说是之前)将会通过 IResource 接口的 AddRefOnChannel 方法让资源通过...Brush 类,其实是调用了 AddRefOnChannelCore 抽象方法 SolidColorBrush 里面实现了 AddRefOnChannelCore 申请非托管资源

68350

WPF DataGrid 如何将被选中行带到视野

WPF DataGrid 如何将被选中行带到视野 目录 前言 准备工作 方法方法二 总结 独立观察员 2021 年 12 月 11 日 前言 WPF 开发,显示表格一般使用 DataGrid...准备工作 今天准备介绍两个方法。正所谓,工欲善其事必先利其器,所以开始之前,我们先来构建一个可以模拟后台选中行的功能。...使用的还是之前用过的 DataGrid 的 Demo 程序(WPF DataGrid 通过自定义表头模拟首行固定》和《WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题》中用过),加了一个可以填写要选中的行号的文本框...方法一 这个方法是参考《【翻译】WPF 附加行为的介绍 Introduction to Attached Behaviors in WPF》文章的将 TreeViewItem(树状列表项)带到视野方法...类似于这个帖子的情况《WPF 开启行虚拟化的时候,行选择功能不正常,求解决方案》(https://bbs.csdn.net/topics/392666509): 所以如果因为数据量比较大必须开启行虚拟化时

1.8K10

WPF开源项目:WPF-ControlBase

WPF应用MVC 原文标题:封装:简要介绍自定义开发基于WPF的MVC框架 原文链接:https://blog.csdn.net/u010975589/article/details/100019431...4.1 目的 使用Asp.net Core时,深感MVC框架作为页面跳转数据处理的方便,但WPF似乎没有现成的MVC框架,由此自定义开发一套MVC的框架,使用过程也体会到框架的优势,下面简要介绍一下这套基于...DisplayName属性:UI显示的名称 Logo属性:UI显示的图标 如下,Controller的Button()方法对应的跳转配置如下 [Route("OverView/Button"...将View和ViewModel封装到IActionResult返回给主页面进行加载 其中Controller方法返回类型是async Task,也就是整个页面跳转都是异步中进行的,可以有效的避免页面切换的卡死效果...4.4 View的结构和定义 其中View项目中的定义就是根据Controller方法对应,MVC要严格按照结构定义[View/Loyout],好处是可以减少代码量,同时使格式统一代码整齐

3.4K30

WPF开源项目:WPF-ControlBase

WPF应用MVC 原文标题:封装:简要介绍自定义开发基于WPF的MVC框架 原文链接:https://blog.csdn.net/u010975589/article/details/100019431...4.1 目的 使用Asp.net Core时,深感MVC框架作为页面跳转数据处理的方便,但WPF似乎没有现成的MVC框架,由此自定义开发一套MVC的框架,使用过程也体会到框架的优势,下面简要介绍一下这套基于...DisplayName属性:UI显示的名称 Logo属性:UI显示的图标 如下,Controller的Button()方法对应的跳转配置如下 [Route("OverView/Button"...将View和ViewModel封装到IActionResult返回给主页面进行加载 其中Controller方法返回类型是async Task,也就是整个页面跳转都是异步中进行的,可以有效的避免页面切换的卡死效果...4.4 View的结构和定义 其中View项目中的定义就是根据Controller方法对应,MVC要严格按照结构定义[View/Loyout],好处是可以减少代码量,同时使格式统一代码整齐

3.5K10

c# 温故而知新: 线程篇(一) 下

其实有很多方法能让他们恢 复工作,但是个人认为,不创建新线程的条件下,被我们忽视的主线程做不住了,看到自己的兄弟面壁,心里肯定不好受,于是做完他自己的一系列 事情之后,他便去召唤这2个兄弟回来工作了,...} } (由于TestSuspend方法中加入了锁,所以每次只允许一个线程工作,大伙不必本文中深究锁机制,后续章节会给大家详细温故下) 尽然thread2.resume()方法上报错了...中使用多线程的话最后一定要返回UI线程,否则操作界面控件时会报错 //BeginInvoke方法便是返回UI线程的方法...; set; } public int StartX { get; set; } public int StartY { get; set; } public...int ClipWidth { get; set; } public int ClipHeight { get; set; } } } 前台 <Window x:Class

61160

WPF源代码分析系列一:剖析WPF模板机制的内部实现(一)

众所周知,WPF框架,Visual类是可以提供渲染(render)支持的最顶层的类,所有可视化元素(包括UIElement、FrameworkElment、Control等)都直接或间接继承自Visual...一个WPF应用的用户界面上的所有可视化元素一起组成了一个可视化树(visual tree),任何一个显示在用户界面上的元素都在且必须在这个树。...这些模板类WPF模板机制的各自角色是什么?WPF究竟是如何从模板生成visual tree的? 要回答这些问题,最佳途径是从分析模板基类FrameworkTemplate着手。...用代码工具我们可以看到,这个方法FrameworkElement.ApplyTemplate()里被调用了一次,这意味着这个方法WPF可视化元素实现模板应用的唯一入口,其重要性无论如何强调都不为过...internal virtual FrameworkTemplate TemplateCache { get { return null; }

1K20
领券