问题标签 [itemspresenter]

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 投票
2 回答
1877 浏览

wpf - 使用网格作为 ItemsHost

我想使用 Grid 作为 ItemsHost 但没有任何项目出现在它们的绑定(列,行)位置。我怎样才能使这项工作?举个简单的例子:

XAML

代码隐藏

0 投票
1 回答
27105 浏览

c# - WPF - 为 ItemsPresenter 实现 ItemTemplate?

我一直在为 WPF 开发一个 SplitButton 控件,它基本上已经完成,但我正在尝试检查可以在其上设置的所有可能的属性,并确保它们得到实际实现。我主要只剩下两个要实现的属性,即ItemTemplateand ItemTemplateSelector(和AlternationCount,好吧,所以 3 个属性)。

我能够通过将and绑定到它们上来获得HeaderTemplateand工作。这是用于控件的按钮部分。对于控件的下拉部分,我使用了 Popup、Border 和. 问题是我不知道如何为.HeaderTemplateSelectorContentTemplateContentTemplateSelectorContentPresenterItemsPresenterItemTemplateItemTemplateSelectorItemsPresenter

有任何想法吗?


更新:SplitButton 的完整源代码现在可在以下网址获得:http: //anothersplitbutton.codeplex.com/

这是 Luna.NormalColor.xaml 文件:


更新 2 我尝试使用 ItemsControl 切换 ItemsPresenter,但我似乎无法让 ItemTemplate 属性执行任何操作。这是更改后的代码部分:

0 投票
1 回答
3447 浏览

wpf - 为什么 ItemsPresenter 会覆盖我的 DataGrid 的前景样式?

我在 App.xaml 中有一个 DataGrid 样式:

这适用于我的应用程序中的所有数据网格。但是,对于我的一个数据网格,如果特定列共享相同的值,我想对我的行进行分组。所以我在那个特定的数据网格上使用以下内容:

问题:现在这个 DataGrid 根据我的 DataGrid 样式正确显示所有内容,除了它将文本(前景)显示为黑色而不是我的样式。

解决方案:我可以通过将我的 ItemsPresenter 修改为以下任何一项来解决问题(尽管我不明白为什么这是必要的):

或者

问题:谁能解释为什么会发生这种情况和/或提供更好的解决方案来保证我的 ItemsPresenter 不会覆盖我的任何 DataGrid 样式?

谢谢!

0 投票
3 回答
34123 浏览

wpf - WrapPanel 作为 ItemsControl 的 ItemPanel

仍然在玩 WPF 并边走边学。现在尝试构建控件的动态分组(主要是按钮,但可能包括复选框和其他)。

我不知道最好的方法是什么,所以我尝试创建一个 ItemsControl 样式,然后将这些项目添加到 WrapPanel 内的 ItemsPresenter 中。很快意识到这些项目不会包装,因为它们实际上不在 WrapPanel 内,除非我把它作为 ItemsHost。像这样:

请注意,这是一项正在进行的工作,我仍然需要实现许多样式效果。我在这里使用它:

还要注意,它仍然是一项正在进行的工作,因为 UniformGrid 不是去这里的方式,而且边距也可能是一种痛苦(是否有任何边距重叠?)所以输入将不胜感激。

现在到了真正的问题。这不起作用我得到一个错误:

无法将“ItemsPresenter”对象添加到“WrapPanel”。无法显式修改用作 ItemsControl 的 ItemsPanel 的 Panel 的 Children 集合。ItemsControl 为 Panel 生成子元素。对象“System.Windows.Controls.ItemsPresenter”出错。

那么做这样的事情的最好方法是什么(希望能够将按钮和其他控件扔到 ItemControl 中,并且排队真的很好)。将控件放入某种集合并进行迭代会更好吗?

很想把它做好,但我的 WPF 技能仍然缺乏。是否有任何 WPF 书籍可以教授基础知识并展示专业人士如何真正做到这一点?

0 投票
2 回答
25122 浏览

silverlight - ItemsControl、ItemsPanel 和 ItemsPresenter(Silverlight、XAML)

我完全被这三个术语弄糊涂了,什么时候用哪个?有什么关系,他们是哪个控件的孩子?

说这是树是否正确:

ItemsControl > ItemsPresenter > ItemsPanel

0 投票
1 回答
800 浏览

templates - 没有 ItemsPresenter 的 ItemsControl (Silverlight)

我创建了一个继承 ItemsControl 的控件,而我制作的控件没有用于其模板的 ItemsPresenter。相反,我有一个网格。我想做一个这样的列表:


(第 1 项)


(网格分割器)


(第 2 项)


(网格分割器)


(第 3 项)


因为我必须在 Items 之间插入我自己的 GridSplitter,因此我不能使用 ItemsPresenter 并让它为我填充 UI。

我重写了 OnItemsChanged() 方法,因此我可以编写添加/删除 GridSplitter 的逻辑。但是,我仍然需要使用 ItemContainerGenerator 类来为我的 Items 生成 ItemTemplate。

但是当我的控件模板中没有 ItemsPresenter 时,ItemContainerGenerator 似乎不起作用。当我第一次使用它来生成项目时,它会返回一个带有 DataTemplate 的 ContentPresenter。然后我将它插入到我拥有的网格中。但是,屏幕上没有显示任何项目。如果我添加另一个项目,当我插入网格时会抛出一个错误,说该项目已经在可视化树中。这就是我认为没有 ItemsPresenter 的 ItemContainerGenerator 无法工作的原因。

所以我尝试用 ItemsPresenter 替换我的 Grid。这一次,它使用它的下划线逻辑来创建项目,并显示它应该显示的内容。然而,这不是我想要的。

我想使用 ItemContainerGenerator 的原因是我需要从我在 Xaml 中定义的 ItemTemplate 创建 UI 元素。

有没有办法可以使用我的项目控件的 ItemTemplate 生成 UI?

0 投票
2 回答
7898 浏览

wpf - 是否可以覆盖 ItemsPresenter 以使用 Virtualizing StackPanel 而不是常规的堆栈面板?

背景

我有一个从 TreeView 继承的自定义控件,并被修改为以数据网格样式显示。我看到的问题是扩展树时的性能。这在我对 Tree Views 的研究中很常见。使用 WPF 性能工具检查后,我注意到 ItemsPresenter 类使用的是常规堆栈面板,而不是虚拟化堆栈面板。

在此处输入图像描述

这是使用 ScrollContentPresenter 的代码部分(如图所示)。

这是传入的模板。

问题

是否可以强制项目演示者使用虚拟化堆栈面板?

笔记

  • 我已经尝试将 ItemsPresenter 包装在 ScrollViewer 中,但这会产生不希望的结果(每行的滚动条)。
  • 我将选项 CanContentScroll = true 硬编码为测试,因为当它设置为 false 时这会禁用虚拟化。
  • 该控件已投入生产并在多个地方使用,因此此时我无法选择替换/重写/或对设计进行重大修改。如果可能的话,我只是想覆盖这一部分。

非常感谢任何建议或选项。

解决:

我通过将其添加到样式中来修改模板的样式,并将堆栈面板切换为虚拟化。

0 投票
1 回答
580 浏览

windows-phone-7 - ListBox的ControlTemplate样式时如何保持虚拟化?

我读到,当样式不正确时,ListBox将失去其虚拟化。作为notacat 在这个问题中的回答,他的解决方案是可以的。

我意识到每当我将 ItemsPresenter 放入另一个容器中时,例如Grid, Border, ...

ListBox将立即失去其虚拟化。但我确实想放置一个TextBlockbefore ItemsPresenter,而ScrollViewer只接受 1 个子元素。

如何处理?

更新:我看到这篇文章Derek Lakin所做的是将其放置TextBlockScrollViewer模板中,但如何将其TextBlock放入ScrollContentPresenter

P/S:我确实设置VirtualizingStackPanelItemsPanel我的ListBox.

0 投票
1 回答
967 浏览

c# - 获取 Flipview ItemsPresenter 以显示下一个和上一个项目

我有一个 uwp 翻转视图,希望让它显示一些下一个和上一个元素。本质上,这意味着使每个翻转视图项稍小一些,以便您知道翻转视图可以滚动。这是我目前拥有的屏幕截图:

在此处输入图像描述

翻转视图是带有迈克尔·法斯宾德圆形图像的部分。你可以滑动到下一张,所以我想在左边显示下一张图片。我注意到 FlipView 默认样式在滚动查看器中有一个 ItemsPresenter(我们可以通过在 Visual Studio/Edit Style/Edit a Copy ... 中右键单击它来修改 FlipView 默认样式)。如果我将该 ItemsPresenter 的边距设置为每边的 -100,它在某些时候会起作用,但行为是奇怪的、不可预测的,并且取决于窗口的宽度。还有什么其他的解决方案?

0 投票
1 回答
2494 浏览

c# - 如何在 WPF 中设置 ItemsPresenter 的样式?

我有一个包含时间线视图的项目(这个)。我需要这个时间线视图的背景是透明的(因为我正在渲染它后面的其他对象/控件)。有一个元素是不透明的,所以我需要将其更改为透明。

如果我在调试执行期间检查视图中的元素,我可以看到需要更改的元素是 ItemsPresenter(见下图)。ItemsPresenter 包含一个 StackPanel,当通过在实时可视树中编辑其属性来更改此堆栈面板的颜色时,问题已解决。

突出显示元素的 Live Visual Tree 的屏幕截图

...如何为 ItemsPresenter 控件添加一个样式,该样式可以全局使用,也可以由时间线专门使用,从而更改它包含的堆栈面板的背景?你能提供一个例子吗?

非常感谢您的帮助。