问题标签 [itemspaneltemplate]

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 投票
12 回答
25583 浏览

.net - 将 Grid 用作 ItemsPanelTemplate 的 ListBox 会产生奇怪的绑定错误

我有一个 ListBox 控件,并且在网格布局中呈现固定数量的 ListBoxItem 对象。所以我将我的 ItemsPanelTemplate 设置为网格。

我正在从后面的代码访问 Grid 以配置 RowDefinitions 和 ColumnDefinitions。

到目前为止,一切都按我的预期工作。我有一些自定义的 IValueConverter 实现,用于返回每个 ListBoxItem 应该出现的 Grid.Row 和 Grid.Column。

但是有时我会遇到奇怪的绑定错误,我无法弄清楚它们发生的确切原因,或者即使它们在我的代码中。

这是我得到的错误:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ListBoxItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')

任何人都可以解释发生了什么吗?

哦,这是我的 XAML:

0 投票
2 回答
9360 浏览

wpf - WPF - 为什么列表框项目不填充uniformgrid

我有一个列表框,其中 ItemsPanelTemplate 设置为 UniformGrid,rows= 6 和 cols= 7。

我希望列表框项目填满它们的空间。

我正在使用字典中定义的数据模板。

我的模板的外部控件是一个 Border 与 Horizo​​ntalAlignment=Stretch 和 VerticalAlignent=Strectch 但模板不填充列表框项目空间?

有任何想法吗?马尔科姆

0 投票
2 回答
6894 浏览

wpf - ItemTemplate 和 ItemPanelTemplate 有什么区别?

在 WPF中,Listbox我对这两个概念感到困惑: 有人可以解释一下吗?ItemTemplateItemsPanelTemplate

谢谢约翰

0 投票
1 回答
1761 浏览

c# - 更改项目的显示方式 WPF 列表框

我有一个 WPF 窗口,它显示一个ListBox. 我更改了ListBox的项目模板,以便列表框显示可以选择的矩形项目。

现在我想修改ListBox'sItemsPanelTemplate以便项目显示在网格中,而不是垂直或水平列表中。具体来说,我希望第一个项目进入右上角,ListBox然后第二个项目位于其下方,第三个项目位于其下方,直到下一个项目的高度会使项目列高于其ListBox自身的高度。此时,它应该直接在添加的第一个项目的右侧开始第二列。如果所有列组合的总宽度大于宽度,ListBox则应出现水平滚动条。

有没有办法通过修改ItemsPanelTemplate或者我需要扩展ListBox类本身来获得这种效果?在任何一种情况下,我该怎么办?

谢谢你的帮助!

0 投票
1 回答
2920 浏览

c# - 带有自定义 ItemsPanel 模板的 WPF ListBox 如何根据其项目的大小调整自身大小

这是对此的后续问题,已得到回答。

使用代码:

您可以创建一个列表,其中项目ListBox从左到右填充 in 列,并且特定列中的最后一个项目永远不会被截断(这意味着如果项目太高以适应,它会移动到下一列的顶部)。我现在如何动态调整'适合'它WidthListBox项目并水平获得相同的行为。所以假设如下:

如果在给定的情况下Height,只需要一个Column来适应所有项目Width,那么ListBox应该是项目的大小Width

或者,在给定的Height情况下,需要四个Columns,它的大小需要是Width项目的四倍。

最后,假设在给定的Height情况下,s 需要Column超过 s 的最大允许Width ListBox,它需要计算它应该有多宽,以便Columns 中无法容纳的项目不会被截断,但只是不显示直到用户向右滚动。

谢谢你的帮助!!

编辑:

我认为表达上述内容的一种更简单的方法是我正在寻找一种方法来避免“剪切”列表中的项目。我想创建一个在网格中显示项目的列表,但您不必滚动,因为某些项目被部分覆盖,并且需要您向右或向左滚动以查看该项目的其余部分(尽管列表只能这么宽或这么高,如果有足够的项目你仍然需要滚动查看所有项目,你看到的任何项目都应该完全显示)。另外我只关心列表的初始绘制。它不必“捕捉”项目以始终适合,但它应该能够滚动,以便它用它显示的项目完全填充可用空间。

在我看来,这样做的关键是在运行时确定列表项的大小以及列表框中内容容器的大小,然后您可以在列表最初出现之前对其进行调整以一次完全适应这么多项目画?

谢谢!

0 投票
2 回答
2485 浏览

wpf - 无法获取 ListBox 的内容以调整大小

我在这里尝试了关于拉伸的建议,但它对我不起作用。

我有一个 TabItem,它承载一个 UserControl,它本质上只是一个带有 ItemsPanel 的 ListBox。ItemsPanel 强制 ListBox 水平显示其内容。ListBox 的内容数据绑定到ObservableCollection<StackPanelContents>另一个 UserControl。 StackPanelContents它本身基本上只包含一个List具有一些视觉表示的对象(它们包含一个用于可视化的 UIElement)。

一般来说,代码可以正常工作,因为它呈现了我在 中包含的所有数据ObservableCollection,但问题是项目不会随着窗口的放大或缩小而调整大小。

以下是类层次结构的概述:

替代文字

结果如下:

替代文字

主窗口的 XAML 只有 TabControl 和 TabItem:

显示 StackPanelContents 的 ListBoxContainer XAML 如下所示:

StackPanelContents UserControl 看起来像这样:

谁能解释为什么这不会自动调整大小,以及我该如何解决这个问题?我是否必须编写自己的自定义面板来处理这个问题,并使用MeasureOverrideand Arrange

0 投票
1 回答
1040 浏览

wpf - 将控件添加到作为 ListView 的 ItemsPanelTemplate 的 Grid 中的空单元格

我有一个 WPF ListView,它有一个网格作为 ItemsPanelTemplate。我根据项目的属性在正确的列和行中显示我的项目。但我想在网格的空单元格中放置一些控件。

这是我的代码和 xaml 的简化版本:

在资源中:

在 xaml 中:

最后,在我的 CustomListView 中:

注意:我知道我正在转换为 DomainObject,但请耐心等待。

这将给我的是一个网格,其中包含正确的行和列中的项目。但是如果我想在空单元格中显示一些东西,例如一些像'null'这样的文本呢?

我不能只是将它添加到我的模板中,因为这会使应用程序崩溃,并说 ItemsControl 将创建必要的控件。我尝试在代码隐藏中访问网格/模板,但找不到如何访问。也许我不应该使用 ListView?也许还有其他/更好的解决方案?

0 投票
1 回答
7337 浏览

wpf - WPF ListBox 的分组面板

我有一个列表框,它使用 GroupStyle 对项目进行分组。我想在包含所有组的堆栈面板底部添加一个控件。此附加控件需要成为滚动内容的一部分,以便用户滚动到列表底部以查看该控件。如果我使用没有组的列表框,则通过修改列表框模板可以轻松完成此任务。但是,将项目分组后,ListBox 模板似乎仅适用于每个组。我可以修改 GroupStyle.Panel,但这不允许我向该面板添加项目。

这应该让我知道我需要做什么:

群体风格需求

0 投票
2 回答
2083 浏览

wpf - 如何设置 WPF 的 ItemsControl 以在唯一位置显示每个元素?

我正在构建一个 BlackJack 程序,目前正在研究手显示器。

我有一个 PlayerSeat UserControl,其中有一个 ItemsControl 用于显示卡片。与普通的二十一点游戏一样,这些牌(在我的例子中是图像)是相互叠放的。不同的游戏动作(Split、Double Down 等)必须改变卡牌在屏幕上的布局。ItemsControl 的 ItemSource 属性是ObservableCollection<Card> Hand我的 Player 的 ViewModel 中的一个“”属性。卡片对象包含带有卡片图像的 BitmapSources。

我浏览了几个网页(见帖子末尾),寻找实现我想要的方法。我正在寻找一种方法来做两个选项之一。

  1. (优选)为每个“手模式”(Split、Double Down 等)指定布局,并指定 Hand ( OC<Card>) 的每个索引应按顺序放置的位置。例如,对于 Hand 中的第一张卡片,将 Source 绑定到 Hand[0].CardImage 的 Image 控件放在 (X1, Y1) 处,然后将 Hand[1] Image 放在 (X2, Y2) 处,依此类推。这可以通过在 ItemsControl 上设置某种绑定模板属性(以在手部模式之间进行更改)进行最佳调整。

  2. (后备)显示绑定了 Source 属性的所有 Image 控件。将这些图像的 Top/Left 属性绑定到 Hand[0].Top/Left 并在 Hand 类中进行放置计算。

我不是一个不亲自调查这个问题就问的人。看来我需要将 ItemsPanelTemplate 与 StackPanel 一起使用,但不知道从哪里开始。关键是使图像重叠并放置在我想要的位置。您对我的问题的任何了解都会有所帮助。

参考: http ://drwpf.com/blog/itemscontrol-a-to-z/ (特别是“ItemsControl:'P'是面板”)

0 投票
2 回答
3053 浏览

wpf - 分组的 CollectionView 的组可以水平呈现吗?

根据这个答案,我正在实现一个 ListBox,其 ItemsPanel 是 WrapPanel ,但有一个转折:我的 ItemsSource 是一个分组的CollectionView。将 aGroupStyle应用于我的 ListBox 后,该问题中显示的换行不起作用:组始终垂直显示。

窥探我的应用程序,原因如下:

Snoop 在 GroupItem 中显示 WrapPanel

如您所见,WrapPanel,定义为我的ListBox 的ItemsPanelTemplate,出现在每个GroupItem的ItemsPresenter 中;创建一个隐式的、垂直方向的 StackPanel(粉红色框中的顶部项目)以包含 GroupItems 本身。

有没有办法覆盖这种行为,所以 GroupItems 被放置在 WrapPanel 中?我是否必须重新模板化整个 ListBox?

更新:为了说明我对 ListBox 和 CollectionView 分组的实际操作,让我发布一点 XAML:

GroupStyle是它的核心:如果您删除它,GroupItems 不会被渲染,并且 WrapPanel(您可以在上面的屏幕截图中看到出现在 GroupItem 下方)代替屏幕截图中的 (StackPanel) 98 出现。