RibbonX kennt .NET Images

Das ist irgendwie total an mir vorbei gegangen. Während in der Beta (VS 2008 Office Integration) bei dynamisch befüllten Ribbon Controls:

 

 <dropDown id="MyDropDown"
          getItemID="getDDItemID"
          getItemCount="getDDItemCount"
          getItemLabel="getDDItemLabel"
          getItemImage="getDDItemImage"
          onAction="onDDAction">
</dropDown>

immer noch die Images als COM Struktur IPictureDisp übergeben:

 

 public stdole.IPictureDisp getDDItemImage(Office.IRibbonControl control, int index)
{
   MemoryStream iconStream = new MemoryStream(...);
   return ImageConverter.ImageToPictureDisp(Image.FromStream(iconStream));
}

und dann datürlich eine Umwandlungsroutine geschrieben werden mußte, die Image in IPictureDisp konvertiert:

 

 internal class ImageConverter : System.Windows.Forms.AxHost
{
  public ImageConverter() : base(string.Empty) { }

  static public stdole.IPictureDisp ImageToPictureDisp(Image image)
  {
    return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);
  }

  static public stdole.IPictureDisp IconToPictureDisp(Icon icon)
  {
    return ImageToPictureDisp(icon.ToBitmap());
  }
}

kann jetzt das Image direkt übergeben werden:

 

 public Image getDDItemImage(Office.IRibbonControl control, int index)
{
   MemoryStream iconStream = new MemoryStream(...);
   return Image.FromStream(iconStream);  
}

Leider geht das nicht mit Icons. Also wer schön freigestellte Icons verwendet, wird nach wie vor die Umwandlungsroutine nutzen müssen (Was nicht wirklich viel mehr Aufwand darstellt).