Winform开发框架中如何使用DevExpress的内置图标资源

2020-01-05 10:06:44丽君

为了获取图表资源里面的分类及大小等信息,我们需要把图标资源进行一个加载出来,然后读取里面的类别和大小、集合等信息。先定义几个变量来承载这些信息。


/// <summary>
  /// 图标分类
  /// </summary>
  public List<string> Categories { get; set; }
  /// <summary>
  /// 图标集合
  /// </summary>
  public List<string> Collection { get; set; }
  /// <summary>
  /// 图标尺寸
  /// </summary>
  public List<string> Size { get; set; }

我们知道,DevExpress的图标资源在程序集DevExpress.Utils.DxImageAssemblyUtil.ImageAssembly里面,因此我们需要对它进行读取,并依次对各个资源进行处理。

我们来看看具体的处理代码,如下所示。


using (System.Resources.ResourceReader reader = GetResourceReader(DevExpress.Utils.DxImageAssemblyUtil.ImageAssembly))
   {
    System.Collections.IDictionaryEnumerator dict = reader.GetEnumerator();
    while (dict.MoveNext())
    {
     string key = (string)dict.Key as string;
     if (!DevExpress.Utils.DxImageAssemblyUtil.ImageProvider.IsBrowsable(key)) continue;
     if (key.EndsWith(".png", StringComparison.Ordinal))
     {
      string reg = @"(?<collection>S*?)/(?<category>S*?)/(?<name>S*)";
      var collectionItem = CRegex.GetText(key, reg, "collection"); 
      var categoryItem = CRegex.GetText(key, reg, "category");
      string sizeReg = @"_(?<size>S*).";
      var sizeItem = CRegex.GetText(key, sizeReg, "size");

      if (!this.Collection.Contains(collectionItem))
      {
       this.Collection.Add(collectionItem);
      }
      if (!this.Categories.Contains(categoryItem))
      {
       this.Categories.Add(categoryItem);
      }
      if (!this.Size.Contains(sizeItem))
      {
       this.Size.Add(sizeItem);
      }

      Image image = GetImageFromStream((System.IO.Stream)dict.Value);
      if (image != null)
      {
       var item = new DevExpress.XtraBars.Ribbon.GalleryItem(image, key, key);
       if (!ImageCollection.ContainsKey(key))
       {
        ImageCollection.Add(key, item);
       }
      }      
     }
    }
   }

其中读取资源的操作代码是


GetResourceReader(DevExpress.Utils.DxImageAssemblyUtil.ImageAssembly)