问题标签 [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.
wpf - WPF ListBox 可以“只读”吗?
我们有一个场景,我们想要显示一个项目列表并指示哪个是“当前”项目(带有一个小箭头标记或更改的背景颜色)。
ItemsControl 对我们没有好处,因为我们需要“SelectedItem”的上下文。但是,我们希望以编程方式移动选择,并且不允许用户更改它。
有没有一种简单的方法可以使 ListBox 非交互式?我们可以通过故意吞下鼠标和键盘事件来伪造它,但是我是否缺少一些基本属性(例如将“IsEnabled”设置为 false 而不会影响其视觉风格),这些属性可以提供我们想要的东西?
或者......是否有另一个 WPF 控件是两全其美的 - 具有 SelectedItem 属性的 ItemsControl?
silverlight - 查找与 Silverlight ItemsControl 中的项目对应的 UI 元素
我有一个 Silverlight ItemsControl 显示的字符串列表。DataTemplate 是一个以 TextBlock 作为其子项的 Border 控件。如何访问与项目对应的边界控制?例如,我可能想这样做来更改背景颜色。
wpf - 如何从数据绑定的 ItemsControl 中获取模板化项目的实例?(WPF)
我有一个<ItemsControl>
带有自定义的<DataTemplate>
(还有一个<ItemsPanelTemplate>
只是 a的自定义WrapPanel
),通过绑定ItemsSource
到一个简单的可观察字符串集合。
DataTemplate
仅包含一个自定义实例,其UserControl
属性通过 绑定到字符串{Binding}
。
问题是因为我的数据项只是字符串,我需要UserControl
直接以编程方式访问我的实例,但我似乎无法弄清楚如何!
我试过了:
...但这只是返回字符串。还:
...返回 a ContentPresenter
,我不知道如何处理ContentPresenter
以获取 my 的实例UserControl
。
??
这类似于这个问题,但它从未得到正确回答,并且也是 Silverlight 特有的,而这是 WPF。
wpf - 什么 WPF 书详细介绍了 GetContainerForItemOverride 和相关内容?
什么 WPF 书详细介绍了 ItemsControl.GetContainerForItemOverride 及相关内容?此外,我想了解 TreeView 覆盖它的原因以及 IsItemItsOwnContainerOverride 与它的关系。
c# - WPF 数据模板化 ItemsControl
我有一个ItemsControl
who在运行时ItemsSource
绑定到一个。ObservableCollection<Component>
我已经为类型定义了一个可以正常工作的数据模板Component
。
现在Component
有一个ObservableCollection<Control>
,我想ItemsControl
在我的内部添加另一个Component
Datatemplate
来呈现所有控件。Control
这是我自己的与 wpf 控件无关的自定义对象。
有不同类型的控件,因此我尝试使用ItemTemplateSelector
为每种类型选择正确的模板。在下面的示例中,为了保持较小,我只显示了一个"RWString"
使用FindResource
inMyControlTemplateSelector
覆盖的模板SelectTemplate
。但是SelectTemplate
永远不会被调用(使用断点检查)。我的 xaml 有问题吗?
更新: Contrls
不是错字,只是我使用了一个愚蠢的命名系统。Contrls
是 Component 类型的属性ObservableCollection<Control>
。另外,我尝试使用 the 的原因ItemsTemplateSelector
是ObservableCollection<Control>
包含泛型类型的对象,例如Control<int>
Control<string>
etc 都派生自Control
,显然您无法创建引用泛型类型的数据模板。
更新 3 :删除更新 2,因为它不相关。我ItemTemplateSelector
通过更改StaticResource
为DynamicResource
. 但我不知道为什么会这样......
c# - 如何以编程方式选择 WPF TreeView 中的项目?
如何以编程方式选择 WPF 中的项目TreeView
?该ItemsControl
模型似乎阻止了它。
silverlight - Silverlight 项目控件。您可以通过模板完全删除面板吗?
我的 ItemsControl 有一个 DataTamplate,它只包含一个带有其他元数据的图像。我想要做的是绑定到 ItemsControl 并让图像与通过我提供的数据绑定的 Convas.Left 和 Canvas.Top 一起显示。
我一直在尽力通过 ItemsPanelTemplate 从控件中删除任何面板,因此我可以使用父画布中的附加属性,但似乎默认情况下您总是会得到一个 StackPanel。
有人有什么好主意吗?
谢谢,戴夫
silverlight - 如何使用 Silverlight 监视 ItemsControl 中的更改?
我有一个绑定到 ObservableCollection 的 ItemsControl。当可观察集合发生变化时,我有一个事件处理程序来查看 ItemsControl 的子项。不幸的是,当时 ItemsControl 还没有添加新项目(这是可以理解的)。我如何知道 ItemsControl 何时完成添加新的子控件?
换句话说,如果我使用 ItemsControl 来显示文本框列表,当新的 TextBox 控件添加到显示中时如何通知我?
wpf - 如何在 ItemTemplate 中找到我的“CheckBox”项目?
我有以下(非常简单的)ItemsControl:
在代码中,我想做以下事情:
我怎么做?
wpf - 强制 WPF 在 ItemsControl 中创建项目
我想验证我的项目在ListBox
UI 中正确显示。我想一种方法是遍历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()
使用反射调用它(因为它受到保护),但这也不起作用。