问题标签 [itemscontrol]

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 投票
4 回答
15580 浏览

wpf - WPF ListBox 可以“只读”吗?

我们有一个场景,我们想要显示一个项目列表并指示哪个是“当前”项目(带有一个小箭头标记或更改的背景颜色)。

ItemsControl 对我们没有好处,因为我们需要“SelectedItem”的上下文。但是,我们希望以编程方式移动选择,并且不允许用户更改它。

有没有一种简单的方法可以使 ListBox 非交互式?我们可以通过故意吞下鼠标和键盘事件来伪造它,但是我是否缺少一些基本属性(例如将“IsEnabled”设置为 false 而不会影响其视觉风格),这些属性可以提供我们想要的东西?

或者......是否有另一个 WPF 控件是两全其美的 - 具有 SelectedItem 属性的 ItemsControl?

0 投票
3 回答
3430 浏览

silverlight - 查找与 Silverlight ItemsControl 中的项目对应的 UI 元素

我有一个 Silverlight ItemsControl 显示的字符串列表。DataTemplate 是一个以 TextBlock 作为其子项的 Border 控件。如何访问与项目对应的边界控制?例如,我可能想这样做来更改背景颜色。

0 投票
1 回答
753 浏览

wpf - 如何从数据绑定的 ItemsControl 中获取模板化项目的实例?(WPF)

我有一个<ItemsControl>带有自定义的<DataTemplate>(还有一个<ItemsPanelTemplate>只是 a的自定义WrapPanel),通过绑定ItemsSource到一个简单的可观察字符串集合。

DataTemplate仅包含一个自定义实例,其UserControl属性通过 绑定到字符串{Binding}

问题是因为我的数据项只是字符串,我需要UserControl直接以编程方式访问我的实例,但我似乎无法弄清楚如何!

我试过了:

...但这只是返回字符串。还:

...返回 a ContentPresenter,我不知道如何处理ContentPresenter以获取 my 的实例UserControl

??

这类似于这个问题,但它从未得到正确回答,并且也是 Silverlight 特有的,而这是 WPF。

0 投票
2 回答
2000 浏览

wpf - 什么 WPF 书详细介绍了 GetContainerForItemOverride 和相关内容?

什么 WPF 书详细介绍了 ItemsControl.GetContainerForItemOverride 及相关内容?此外,我想了解 TreeView 覆盖它的原因以及 IsItemItsOwnContainerOverride 与它的关系。

0 投票
2 回答
8276 浏览

c# - WPF 数据模板化 ItemsControl

我有一个ItemsControlwho在运行时ItemsSource绑定到一个。ObservableCollection<Component>我已经为类型定义了一个可以正常工作的数据模板Component

现在Component有一个ObservableCollection<Control>,我想ItemsControl在我的内部添加另一个Component Datatemplate来呈现所有控件。Control这是我自己的与 wpf 控件无关的自定义对象。

有不同类型的控件,因此我尝试使用ItemTemplateSelector为每种类型选择正确的模板。在下面的示例中,为了保持较小,我只显示了一个"RWString"使用FindResourceinMyControlTemplateSelector覆盖的模板SelectTemplate。但是SelectTemplate永远不会被调用(使用断点检查)。我的 xaml 有问题吗?

更新: Contrls不是错字,只是我使用了一个愚蠢的命名系统。Contrls是 Component 类型的属性ObservableCollection<Control>。另外,我尝试使用 the 的原因ItemsTemplateSelectorObservableCollection<Control> 包含泛型类型的对象,例如Control<int> Control<string>etc 都派生自Control,显然您无法创建引用泛型类型的数据模板。

更新 3 :删除更新 2,因为它不相关。我ItemTemplateSelector通过更改StaticResourceDynamicResource. 但我不知道为什么会这样......

0 投票
16 回答
80540 浏览

c# - 如何以编程方式选择 WPF TreeView 中的项目?

如何以编程方式选择 WPF 中的项目TreeView?该ItemsControl模型似乎阻止了它。

0 投票
1 回答
2284 浏览

silverlight - Silverlight 项目控件。您可以通过模板完全删除面板吗?

我的 ItemsControl 有一个 DataTamplate,它只包含一个带有其他元数据的图像。我想要做的是绑定到 ItemsControl 并让图像与通过我提供的数据绑定的 Convas.Left 和 Canvas.Top 一起显示。

我一直在尽力通过 ItemsPanelTemplate 从控件中删除任何面板,因此我可以使用父画布中的附加属性,但似乎默认情况下您总是会得到一个 StackPanel。

有人有什么好主意吗?

谢谢,戴夫

0 投票
2 回答
934 浏览

silverlight - 如何使用 Silverlight 监视 ItemsControl 中的更改?

我有一个绑定到 ObservableCollection 的 ItemsControl。当可观察集合发生变化时,我有一个事件处理程序来查看 ItemsControl 的子项。不幸的是,当时 ItemsControl 还没有添加新项目(这是可以理解的)。我如何知道 ItemsControl 何时完成添加新的子控件?

换句话说,如果我使用 ItemsControl 来显示文本框列表,当新的 TextBox 控件添加到显示中时如何通知我?

0 投票
4 回答
15600 浏览

wpf - 如何在 ItemTemplate 中找到我的“CheckBox”项目?

我有以下(非常简单的)ItemsControl:

在代码中,我想做以下事情:

我怎么做?

0 投票
6 回答
8691 浏览

wpf - 强制 WPF 在 ItemsControl 中创建项目

我想验证我的项目在ListBoxUI 中正确显示。我想一种方法是遍历ListBox视觉树中的所有孩子,获取他们的文本,然后将其与我期望的文本进行比较。

这种方法的问题在于内部ListBox使用 aVirtualizingStackPanel来显示其项目,因此仅创建可见的项目。我最终遇到了这个ItemContainerGenerator类,它看起来应该强制 WPF 在可视树中为指定项目创建控件。不幸的是,这对我造成了一些奇怪的副作用。这是我生成所有项目的代码ListBox

GetItemText()(如果您愿意,我可以提供代码,但它只是遍历可视化树直到TextBlock找到 a。我意识到还有其他方法可以在项目中包含文本,但一旦我得到项目,我会修复一代工作正常。)

在我的应用程序中,ItemsListBox包含 20 个项目,前 12 个项目最初可见。前 14 个项目的文本是正确的(可能是因为它们的控件已经生成)。但是,对于第 15-20 项,我根本没有收到任何文本。另外,如果我滚动到底部ItemsListBox,第 15-20 项的文本也是空白的。因此,我似乎在干扰 WPF 生成控件的正常机制。

我究竟做错了什么?是否有一种不同/更好的方法可以强制将 anItemsControl中的项目添加到可视化树中?

更新:我认为我已经找到了发生这种情况的原因,尽管我不知道如何解决它。我假设调用PrepareItemContainer()将生成任何必要的控件来显示项目,然后将容器添加到正确位置的可视化树中。事实证明,它没有做这两件事。直到我向下滚动查看它,容器才被添加到ItemsControl,当时只有容器本身(即ListBoxItem)被创建 - 它的子级没有被创建(这里应该添加一些控件,其中一个应该是将TextBlock显示项目的文本)。

如果我遍历我传递给PrepareItemContainer()结果的控件的可视化树是相同的。在这两种情况下,都只ListBoxItem创建了 ,而没有创建它的任何子项。

我找不到将其添加ListBoxItem到可视化树的好方法。我VirtualizingStackPanel在可视化树中找到了 ,但是Children.Add()在 an 中调用了它的结果InvalidOperationException(不能直接将项目添加到ItemPanel,因为它会为其生成项目ItemsControl)。作为测试,我尝试AddVisualChild()使用反射调用它(因为它受到保护),但这也不起作用。