在 WPF 应用程序中,我想使用来自文件夹位置的图像显示瓷砖网格(本质上是按钮)。文件夹中可能有任何不同数量的图像,因此需要动态生成图块/按钮并根据数量进行格式化。这些需要是可以触发鼠标点击事件的按钮。
我对 C# 和 .NET 很陌生,所以我想了解一下最好的方法是什么。我已将其作为 WPF 应用程序启动,所以使用模板是个好主意吗?或者,如果只是动态创建带有背景图像的表单按钮是一个简单的选择,那么我会试一试。
您可能需要一个 ItemsControl,例如 ListView。不幸的是,WPF 仅提供 GridView 实现,但 ListView 旨在支持您在 Windows 文件资源管理器中看到的所有视图。对于基于 Tiled 的视图,您需要重写 ViewBase 类并将其分配给 ListView 的 View 属性。
几年前,我有演示您想要什么的示例代码。
以下链接包含 MSDN 示例: MSDN ListView.View 示例
我知道 Xceed DataGrid 有一个内置的 CardView 模式。我不知道它是否在免费版本中可用:Xceed WPF DataGrid 文档
编辑我刚刚检查了 MSDN 示例,我认为它们与您想要的很接近。
我会去ItemsControl
。您需要一个代表按钮的类,具有 X、Y、ImageUri 等属性。您通过公开生成的按钮ObservableCollection
并将其绑定到ItemsSource
您的ItemsControl
. 然后你改变你ItemsPanelTemplate
的网格:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<!--Here go rows and columns definitions-->
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
如果您有固定数量的行和列,您可以直接在 XAML 中添加它们,否则在运行时在代码隐藏中生成它们。您添加ItemsContainerStyle
定位:
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{Binding Y}" />
<Setter Property="Grid.Column" Value="{Binding X}" />
</Style>
</ItemsControl.ItemContainerStyle>
此外,您还需要ItemTemplate
使用图像覆盖显示按钮。其他选项是使用Canvas
或UniformGrid
作为ItemsPanelTemplate
(各有优缺点)。