我正在开发一个WPF应用程序,我希望在我的项目的Resources文件夹中显示我作为png Images嵌入的图标列表。
图像的构建操作是'资源',它们是位于以下位置:
'NameOfProject'/Resources/Icons/'SomeCategories'/'AllTheIcons'.png
因为有大约一千个我想通过类似的foreach语句将它们加载到listview中:
foreach (imageorwhatever icon in Resources/Icons/Category1) { ... }
foreach (imageorwhatever icon in Resources/Icons/Category2) { ... }
etc.
到目前为止,我还没有找到解决方法。我找到的所有解决方案都是单独定位每个资源,或者从文件中加载它们。
我更喜欢迭代加载图像,因为我真的不想在代码或xaml中定义1000个图像
答案 0 :(得分:0)
要在WPF中使用它们,它们需要成为ResourceDictionary的一部分,以便可以访问它们。以下是一些适合我的代码:
using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace ResourceTest
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
var dict = new ResourceDictionary();
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
foreach (var file in Directory.GetFiles("Images"))
{
dict.Add(file, new BitmapImage(new Uri(Path.Combine(baseDir, file))));
}
Application.Current.Resources.MergedDictionaries.Add(dict);
foreach (var file in Directory.GetFiles("Images"))
{
var img = new Image();
img.Source = (BitmapImage) FindResource(file);
ListBox.Items.Add(img);
}
}
}
}
你需要的只是名为“ListBox”的XAML中的ListBox来运行它:
<ListBox x:Name="ListBox" HorizontalAlignment="Left" Height="238" Margin="23,30,0,0" VerticalAlignment="Top" Width="130"/>
我没有花太多时间在这上面,而不是第二个循环更好的只是将项目放入List,然后分配给ResourceDictionary,然后分配ListBox,但这是有效的。
编辑:忘了,但我只是创建文件名的资源名称,如上例所示。可能想要改变它或者至少删除扩展名。