问题标签 [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.

0 投票
1 回答
118 浏览

c# - 如何在 ItemsControl 中等待容器的生成?

我有一个SettingsWindow,其中有一个音频文件选择器,它有一个上下文菜单。一些代码MyAudioFileSelector在获得之前访问计算属性,AudioFileSelector因为AudioFileSelector它只是在当时尚未生成其容器DataTemplate的项的a 内。ItemsControl我试图推迟MyAudioFileSelector使用Dispatcher.BeginInvokewith的访问DispatcherPrority.Loaded,但此时项目容器仍未生成。

访问 的代码MyAudioFileSelector是应用用户选择的数据文件中的许多设置之一的方法。对于程序的数据文件模式中的每个设置,此方法从Window的事件处理程序中同步调用。Loaded

我对 async-await 编程很陌生,我读过这个,但我不确定这对我有什么帮助,我读了这个页面,但我仍然不知道该怎么做。我已阅读内容,但唯一未被接受的答案似乎与我在下面已经使用的类似:

XAML 的一部分

InverseBooleanConv只做true, false, 和false, true

部分代码隐藏

在 MainWindow.xaml.cs 中,Window_Loaded处理程序的开头

在 MainWindow.xaml.cs 的方法中ApplySetting

SettingsWindow课堂上

该错误位于上述代码片段之一中的两个 C# 注释中,即空引用异常。

我想我可以在MainWindowa 处理程序中附加到SettingsWindow's ItemsControl'ItemContainerGenerator事件StatusChanged,然后继续初始化窗口,包括加载所有设置,但我想知道是否有更有序/正确的方法。

谢谢你。

0 投票
1 回答
106 浏览

c# - 如何在 ItemsControl 生成其容器之前或之后更改加载的主题资源字典,但不是在那个时候?

我动态加载应用程序资源字典(一次加载 3 个中的 2 个):

  1. 一个基本资源字典,总是
  2. Light.xaml 主题文件
  3. 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。

谢谢你。

0 投票
1 回答
600 浏览

c# - WPF TreeView中的多级多选

我正在尝试使用多级 WPF 树视图实现多选。为此,我禁用了 WPF 选择,而是突出显示了所选项目并对其进行了处理。

此实现适用于 Ctrl 按钮并选择 random 。

但是对于移位选择,如果我尝试突出显示未展开的树节点,我可以突出显示树节点而不是它的子节点。要求是扩展树节点并突出显示子节点。

展开树节点后,我无法从 ItemContainerGenerator 获取子节点的容器。它总是返回 null

无论我尝试到现在

1.展开Parent TreeViewItem后使用UpdateLayout();(ItemContainerGenerator.ContainerFromItem(item)返回 null)

  1. 关闭虚拟化堆栈。

有什么方法可以让 ItemContainerGenerator 在扩展 TreeNode 后立即生成项目

任何帮助表示赞赏!

0 投票
0 回答
54 浏览

c# - 如何确定从 ItemsControl 派生的类中的项目类型

我正在为 ItemsControl 实现一个附加属性。面对这样一个我无法解决的任务。我从 ItemTemplate 中的 UI 元素沿着可视化树爬到 ItemsControl。没有问题。但我还需要在 ItemsControl 中定义用于生成项目的类型。而且这个类型在ItemsControl派生的不同类中也有所不同。

假设 ListBox 可以应用以下代码

0 投票
1 回答
64 浏览

c# - 在 Fluent Ribbon 中无法从后台获取项目容器

我无法从ListBoxin获取项目容器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.