windows wpf迭代加载资源文件

时间:2017-07-03 20:07:38

标签: c# wpf image resources iteration

我正在开发一个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个图像

1 个答案:

答案 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,但这是有效的。

编辑:忘了,但我只是创建文件名的资源名称,如上例所示。可能想要改变它或者至少删除扩展名。