问题标签 [itemcontainergenerator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何在 ItemsControl 中等待容器的生成?
我有一个SettingsWindow
,其中有一个音频文件选择器,它有一个上下文菜单。一些代码MyAudioFileSelector
在获得之前访问计算属性,AudioFileSelector
因为AudioFileSelector
它只是在当时尚未生成其容器DataTemplate
的项的a 内。ItemsControl
我试图推迟MyAudioFileSelector
使用Dispatcher.BeginInvoke
with的访问DispatcherPrority.Loaded
,但此时项目容器仍未生成。
访问 的代码MyAudioFileSelector
是应用用户选择的数据文件中的许多设置之一的方法。对于程序的数据文件模式中的每个设置,此方法从Window
的事件处理程序中同步调用。Loaded
我对 async-await 编程很陌生,我读过这个,但我不确定这对我有什么帮助,我读了这个页面,但我仍然不知道该怎么做。我已阅读此内容,但唯一未被接受的答案似乎与我在下面已经使用的类似:
XAML 的一部分
(InverseBooleanConv
只做true
, false
, 和false
, true
)
部分代码隐藏
在 MainWindow.xaml.cs 中,Window_Loaded
处理程序的开头
在 MainWindow.xaml.cs 的方法中ApplySetting
在SettingsWindow
课堂上
该错误位于上述代码片段之一中的两个 C# 注释中,即空引用异常。
我想我可以在MainWindow
a 处理程序中附加到SettingsWindow
's ItemsControl
'ItemContainerGenerator
事件StatusChanged
,然后继续初始化窗口,包括加载所有设置,但我想知道是否有更有序/正确的方法。
谢谢你。
c# - 如何在 ItemsControl 生成其容器之前或之后更改加载的主题资源字典,但不是在那个时候?
我动态加载应用程序资源字典(一次加载 3 个中的 2 个):
- 一个基本资源字典,总是
- Light.xaml 主题文件
- Dark.xaml 主题文件
MergedDictionaries
如果我通常在主窗口已经存在时更改属性的值Loaded
,我会得到一个异常(在此处调用堆栈):
System.InvalidOperationException: “内容生成正在进行时无法调用 StartAt。”
如果我使用 更改MergedDictionaries
属性的值Dispatcher.BeginInvoke
,当我在 (1) 的代码隐藏中使用资源时,它会通过一个异常表示它尚未加载(例如使用StaticResource
不存在的资源)。
我不想使用 App.xaml 文件,因为对于单实例应用程序,我使用了一个类,该类继承自Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
并调用我的 App.cs 文件中的代码。
我可能会在应用程序代码的几个地方调用 LoadTheme 方法,我想让它稳定。
应用程序.cs
(无 XAML)
我试图制作一个测试示例,但失败了 - 我创建了一个可以工作的程序,因为我在ItemsControl.ItemsSource
每次应用模板时都设置了。在我的实际项目中,我ItemsSource
通过数据绑定设置,有时是手动设置,但我不确定这是我实际项目中遗漏的内容。
我使用 .NET Framework 4.7.2、VS 2019、Win 10 Pro。
谢谢你。
c# - WPF TreeView中的多级多选
我正在尝试使用多级 WPF 树视图实现多选。为此,我禁用了 WPF 选择,而是突出显示了所选项目并对其进行了处理。
此实现适用于 Ctrl 按钮并选择 random 。
但是对于移位选择,如果我尝试突出显示未展开的树节点,我可以突出显示树节点而不是它的子节点。要求是扩展树节点并突出显示子节点。
展开树节点后,我无法从 ItemContainerGenerator 获取子节点的容器。它总是返回 null
无论我尝试到现在
1.展开Parent TreeViewItem后使用UpdateLayout();(ItemContainerGenerator.ContainerFromItem(item)返回 null)
- 关闭虚拟化堆栈。
有什么方法可以让 ItemContainerGenerator 在扩展 TreeNode 后立即生成项目
任何帮助表示赞赏!
c# - 如何确定从 ItemsControl 派生的类中的项目类型
我正在为 ItemsControl 实现一个附加属性。面对这样一个我无法解决的任务。我从 ItemTemplate 中的 UI 元素沿着可视化树爬到 ItemsControl。没有问题。但我还需要在 ItemsControl 中定义用于生成项目的类型。而且这个类型在ItemsControl派生的不同类中也有所不同。
假设 ListBox 可以应用以下代码
c# - 在 Fluent Ribbon 中无法从后台获取项目容器
我无法从ListBox
in获取项目容器Backstage
。说,我有以下内容Backstage
:
我填写:
接下来,我想ListBoxItem
从 的第一个条目中检索项目容器(在本例中为 - )ListBox
:
但container
总是null
。但!如果我打开Backstage
然后隐藏它,我会看到以下消息:
container = System.Windows.Controls.ListBoxItem
.
所以,我决定添加Backstage
在填充之前打开的代码:
这可行,但是当您几乎看不到Backstage
显示和隐藏时会闪烁。这不是完美的解决方案。那么,如何获取物品容器呢?
PS 测试项目在这里。
更新(解释)
我需要项目容器的原因是我需要CheckBox
在填充时添加设置状态ListBox
。这ListBox
被设计为包含CheckBox
项目的 es:
所以,当我在上面的循环中添加文本时,CheckBox
就会创建。然后,我需要设置这些复选框的状态,这些复选框来自 JSON。所以,我需要这样的东西:
问题是container
总是如此null
。此外,无论我使用Loaded
还是ContentRendered
事件都没关系 - 在任何一种情况下container
都是null
.