列表框,其中项目具有多个可选区域
我不确定在 WPF 中实现此功能的最佳方法,因此我首先说明我的问题。
我有一个框架集合。每帧有两个图像。假设我有 10 个帧,总共 20 张图像。我想在屏幕底部显示像胶片一样组织的图像 - 2 行和 10 列。当用户单击其中一张图像或使用箭头时,它应该被选中,并且所选图像信息将在应用程序的其他地方使用。
我已将其实现为 ListBox,其中 ItemsSource 绑定到我的视图模型的 Frames 集合(可观察集合)。在列表框的数据模板中,我创建了一个包含两行的网格,每行包含一个图像控件。第 0 行的一个绑定到 TopImage(我的 Frame 类的一个属性),底部的一个绑定到 BottomImage。
所有这些工作都有效,但问题是当我使用箭头时,整个框架(项目)都会被选中。如何单独选择数据模板中的每个图像?
或者
有没有更好的方法来实现这个>
I'm not sure about the best way to implement this in WPF, so I'll state my problem first.
I have a collection of frames. Each frame has two images. Let's say I have 10 frames giving a total of 20 images. I want to show the images at the bottom of the screen organized like a film strip - 2 rows and 10 columns. When the user clicks on one of this images or uses the arrow, it should become selected and the selected image information will be used somewhere else in the application.
I've implemented it as a ListBox with ItemsSource bound to my viewmodel's Frames collection (an observablecollection). In the DataTemplate of the ListBox, I've created a grid with two rows, each one containing a Image control. The one on row 0 is bound to TopImage (a property of my Frame class) and the bottom one is bound to BottomImage.
All this work, but the problem is that when I use the arrows, the whole frame (item) gets selected. How do I select each image in the datatemplate individually?
OR
Is there a better way to implement this>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您有两个问题:
如果您没有箭头键要求,那么您可以解决第一个 问题通过在父
ItemsControl
中嵌套ListBox
对象来解决此问题。但是箭头只能在ListBox
中做正确的事情。要解决这个问题需要采取不同的方法。这是一个绑定到四元素图像集合的 2x2 网格数据。在这里,我们使用很少使用的
UniformGrid
来使集合在这么多列之后换行。由于我们使用ItemsControl
,我们失去了自动选择支持,但我们通过使Image
控制Button
的内容来恢复它。最终效果是一个 2x2 的图像网格,您可以在它们之间自由移动。您可以使用样式来使按钮外观不那么像按钮,而不会失去可聚焦性。因此,将所有二十个图像绑定到此视图,首先是前十个,然后是后十个。您还可以绑定来自同一数据源的列计数。
You have two problems:
If you did not have the arrow key requirement, then you could solve the first problem by nesting
ListBox
objects inside a parentItemsControl
. But then the arrows only do the right thing within aListBox
. To address that requires a different approach.Here is a 2x2 grid data-bound to a four-element collection of images. Here we use the little-used
UniformGrid
to cause the collection to wrap after so many columns. Since we're using anItemsControl
, we lose automatic selection support but we get it back by making theImage
control the content of aButton
.The net effect is a 2x2 grid of images that you can freely arrow around between. You can use styling to make the button aspect less button-like without losing focusability. So bind all twenty images to this view, first the top ten and then the bottom ten. You can also bind the column count from the same data source.