在功能区中使用.ico图像

时间:2014-12-17 12:53:11

标签: c# xml excel ribbonx

我有一个带有自定义功能区的c#加载项,但是,我没有按钮的图像。我没有.bmp文件,只有.ico。如果可能的话,最好不要转换任何东西。



功能区是通过xml创建的, 不是视觉工作室的丝带设计师

2 个答案:

答案 0 :(得分:2)

完成工作有两种可能的方法。它们都在MSDN中的Customizing the 2007 Office Fluent Ribbon for Developers 文章中描述:

  1. 元素的loadImage属性使您可以指定可以加载所有图像的回调。设置此回调过程后,Office将调用回调过程并为每个加载图像的控件的image属性传递字符串。您不需要多次实现getImage回调,例如每个需要图像的控件一次。

    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="GetImage"> <!-- Later in the markup --> <button id="myButton" image="image.jpg" />

  2. 要提供按钮的图像,Office会调用GetImage函数。它传递参数“mypic.jpg”并期望返回一个IPictureDisp对象。通过使用此技术,您可以编写一个回调过程,该过程返回您的自定义所需的所有图像,而无需编写每个单独控件的getImage回调。请注意,调用功能区的Invalidate方法或InvalidateControl方法时,不会再次调用loadImage回调。对于需要在运行时动态更改图像的控件,请使用getImage回调。

    例如,回调可能如下所示:

     public stdole.IPictureDisp GetImage(string imageName)
     {
       return
          PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
     }
    
    1. 当您需要动态加载图像时,可以使用第二种方法。您需要指定回调函数名称而不是image属性:
    2. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="GetImage"> <!-- Later in the markup --> <button id="myButton" getImage="GetImageCallback.jpg" />

      getImage回调方法必须返回stdole.IPictureDisp类型,因此您通常需要将图像转换为此类型。要执行这些转换,您可以使用以下PictureConverter类,该类继承自AxHost类。

       internal class PictureConverter : AxHost
       {
           private PictureConverter() : 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());
            }
      
           static public Image PictureDispToImage(stdole.IPictureDisp picture)
           {
                return GetPictureFromIPicture(picture);
           }
        }
      

      例如,回调可能如下所示:

       public stdole.IPictureDisp GetImageCallback(IRibbonControl control)
       {
           return
             PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
       }
      

      这取决于你选择的方式。

答案 1 :(得分:1)

来自Add Custom Image to button in excel ribbonhow can I convert System.Drawing.Icon to System.Drawing.Image?

在代码隐藏中,设置图像:

customButton1.Image = new Icon("icon.ico").ToBitmap();