问题标签 [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.
wpf - 使用网格作为 ItemsHost
我想使用 Grid 作为 ItemsHost 但没有任何项目出现在它们的绑定(列,行)位置。我怎样才能使这项工作?举个简单的例子:
XAML
代码隐藏
c# - WPF - 为 ItemsPresenter 实现 ItemTemplate?
我一直在为 WPF 开发一个 SplitButton 控件,它基本上已经完成,但我正在尝试检查可以在其上设置的所有可能的属性,并确保它们得到实际实现。我主要只剩下两个要实现的属性,即ItemTemplate
and ItemTemplateSelector
(和AlternationCount
,好吧,所以 3 个属性)。
我能够通过将and绑定到它们上来获得HeaderTemplate
and工作。这是用于控件的按钮部分。对于控件的下拉部分,我使用了 Popup、Border 和. 问题是我不知道如何为.HeaderTemplateSelector
ContentTemplate
ContentTemplateSelector
ContentPresenter
ItemsPresenter
ItemTemplate
ItemTemplateSelector
ItemsPresenter
有任何想法吗?
更新:SplitButton 的完整源代码现在可在以下网址获得:http: //anothersplitbutton.codeplex.com/
这是 Luna.NormalColor.xaml 文件:
更新 2 我尝试使用 ItemsControl 切换 ItemsPresenter,但我似乎无法让 ItemTemplate 属性执行任何操作。这是更改后的代码部分:
wpf - 为什么 ItemsPresenter 会覆盖我的 DataGrid 的前景样式?
我在 App.xaml 中有一个 DataGrid 样式:
这适用于我的应用程序中的所有数据网格。但是,对于我的一个数据网格,如果特定列共享相同的值,我想对我的行进行分组。所以我在那个特定的数据网格上使用以下内容:
问题:现在这个 DataGrid 根据我的 DataGrid 样式正确显示所有内容,除了它将文本(前景)显示为黑色而不是我的样式。
解决方案:我可以通过将我的 ItemsPresenter 修改为以下任何一项来解决问题(尽管我不明白为什么这是必要的):
或者
问题:谁能解释为什么会发生这种情况和/或提供更好的解决方案来保证我的 ItemsPresenter 不会覆盖我的任何 DataGrid 样式?
谢谢!
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 书籍可以教授基础知识并展示专业人士如何真正做到这一点?
silverlight - ItemsControl、ItemsPanel 和 ItemsPresenter(Silverlight、XAML)
我完全被这三个术语弄糊涂了,什么时候用哪个?有什么关系,他们是哪个控件的孩子?
说这是树是否正确:
ItemsControl > ItemsPresenter > ItemsPanel
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?
wpf - 是否可以覆盖 ItemsPresenter 以使用 Virtualizing StackPanel 而不是常规的堆栈面板?
背景
我有一个从 TreeView 继承的自定义控件,并被修改为以数据网格样式显示。我看到的问题是扩展树时的性能。这在我对 Tree Views 的研究中很常见。使用 WPF 性能工具检查后,我注意到 ItemsPresenter 类使用的是常规堆栈面板,而不是虚拟化堆栈面板。
这是使用 ScrollContentPresenter 的代码部分(如图所示)。
这是传入的模板。
问题
是否可以强制项目演示者使用虚拟化堆栈面板?
笔记
- 我已经尝试将 ItemsPresenter 包装在 ScrollViewer 中,但这会产生不希望的结果(每行的滚动条)。
- 我将选项 CanContentScroll = true 硬编码为测试,因为当它设置为 false 时这会禁用虚拟化。
- 该控件已投入生产并在多个地方使用,因此此时我无法选择替换/重写/或对设计进行重大修改。如果可能的话,我只是想覆盖这一部分。
非常感谢任何建议或选项。
解决:
我通过将其添加到样式中来修改模板的样式,并将堆栈面板切换为虚拟化。
windows-phone-7 - ListBox的ControlTemplate样式时如何保持虚拟化?
我读到,当样式不正确时,ListBox
将失去其虚拟化。作为notacat 在这个问题中的回答,他的解决方案是可以的。
我意识到每当我将 ItemsPresenter 放入另一个容器中时,例如Grid
, Border
, ...
ListBox
将立即失去其虚拟化。但我确实想放置一个TextBlock
before ItemsPresenter
,而ScrollViewer只接受 1 个子元素。
如何处理?
更新:我看到这篇文章,Derek Lakin所做的是将其放置TextBlock
到ScrollViewer
模板中,但如何将其TextBlock
放入ScrollContentPresenter
?
P/S:我确实设置VirtualizingStackPanel
了ItemsPanel
我的ListBox
.
c# - 获取 Flipview ItemsPresenter 以显示下一个和上一个项目
我有一个 uwp 翻转视图,希望让它显示一些下一个和上一个元素。本质上,这意味着使每个翻转视图项稍小一些,以便您知道翻转视图可以滚动。这是我目前拥有的屏幕截图:
翻转视图是带有迈克尔·法斯宾德圆形图像的部分。你可以滑动到下一张,所以我想在左边显示下一张图片。我注意到 FlipView 默认样式在滚动查看器中有一个 ItemsPresenter(我们可以通过在 Visual Studio/Edit Style/Edit a Copy ... 中右键单击它来修改 FlipView 默认样式)。如果我将该 ItemsPresenter 的边距设置为每边的 -100,它在某些时候会起作用,但行为是奇怪的、不可预测的,并且取决于窗口的宽度。还有什么其他的解决方案?
c# - 如何在 WPF 中设置 ItemsPresenter 的样式?
我有一个包含时间线视图的项目(这个)。我需要这个时间线视图的背景是透明的(因为我正在渲染它后面的其他对象/控件)。有一个元素是不透明的,所以我需要将其更改为透明。
如果我在调试执行期间检查视图中的元素,我可以看到需要更改的元素是 ItemsPresenter(见下图)。ItemsPresenter 包含一个 StackPanel,当通过在实时可视树中编辑其属性来更改此堆栈面板的颜色时,问题已解决。
...如何为 ItemsPresenter 控件添加一个样式,该样式可以全局使用,也可以由时间线专门使用,从而更改它包含的堆栈面板的背景?你能提供一个例子吗?
非常感谢您的帮助。