2017-07-03 89 views
0

我正在WPF应用程序中,我想要显示一个图标列表,我已经嵌入到png图像到我的项目的资源文件夹中。
的图像建设行动‘资源’,它们位于如下:Windows WPF迭代加载资源文件

'NameOfProject'/Resources/Icons/'SomeCategories'/'AllTheIcons'.png 

由于大约有一千个我想通过一个foreach语句将它们加载到ListView中,像这样:

foreach (imageorwhatever icon in Resources/Icons/Category1) { ... } 
foreach (imageorwhatever icon in Resources/Icons/Category2) { ... } 
etc. 

我到目前为止还没有找到一种方法来实现这一目标。我找到的所有解决方案均单独针对每个资源,或从文件加载它们。

我宁愿反复加载图像,因为我真的不希望在代码或XAML

回答

0

使用它们WPF他们需要ResourceDictionary中的一部分,所以他们都可以访问定义1000倍的图像。下面是一些代码,为我的作品:

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 x:Name="ListBox" HorizontalAlignment="Left" Height="238" Margin="23,30,0,0" VerticalAlignment="Top" Width="130"/> 

我没有花长在这,而是的第二个循环会更好,只是将项目放入List中,然后分配给ResourceDictionary和ListBox,但这是有效的。

编辑:忘了,但我只是使文件名,你可以在上面的例子中看到的资源的名称。可能要更改或至少删除扩展名。