C# windows wpf迭代加载资源文件
我正在开发一个WPF应用程序,其中我想显示一个图标列表,这些图标已作为png图像嵌入到我的项目的Resources文件夹中。C# windows wpf迭代加载资源文件,c#,wpf,image,resources,iteration,C#,Wpf,Image,Resources,Iteration,我正在开发一个WPF应用程序,其中我想显示一个图标列表,这些图标已作为png图像嵌入到我的项目的Resources文件夹中。图像的“build action”是“resource”,它们的位置如下: 'NameOfProject'/Resources/Icons/'SomeCategories'/'AllTheIcons'.png 由于大约有1000个,我想通过foreach语句将它们加载到listview中,如下所示: foreach (imageorwhatever icon in Res
图像的“build action”是“resource”,它们的位置如下:
'NameOfProject'/Resources/Icons/'SomeCategories'/'AllTheIcons'.png
由于大约有1000个,我想通过foreach语句将它们加载到listview中,如下所示:
foreach (imageorwhatever icon in Resources/Icons/Category1) { ... }
foreach (imageorwhatever icon in Resources/Icons/Category2) { ... }
etc.
到目前为止,我还没有找到实现这一目标的方法。我找到的所有解决方案都分别以每个资源为目标,或者从文件中加载它们
我更喜欢以迭代方式加载图像,因为我真的不想在代码或xaml中定义1000个图像,要在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);
}
}
}
}
您只需要XAML中名为“ListBox”的ListBox即可运行此操作:
<ListBox x:Name="ListBox" HorizontalAlignment="Left" Height="238" Margin="23,30,0,0" VerticalAlignment="Top" Width="130"/>
我没有花太多时间在这方面,而不是第二个循环,最好是将项目放入一个列表,然后分配给ResourceDictionary,然后分配给ListBox,但这是可行的
编辑:忘记了资源的名称,我只是将其作为文件名,如上面的示例所示。您可能希望更改此设置或至少删除扩展名