【问题标题】:Use .ico image in ribbon在功能区中使用 .ico 图像
【发布时间】:2014-12-17 12:53:11
【问题描述】:

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



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

【问题讨论】:

    标签: c# xml excel ribbonx


    【解决方案1】:

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

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

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

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

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

     public stdole.IPictureDisp GetImage(string imageName)
     {
       return
          PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
     }
    
    1. 当您需要动态加载图像时,可以使用第二种方法。您需要指定回调函数名称,而不是图像属性:

    <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);
     }
    

    由你来选择。

    【讨论】:

      【解决方案2】:

      来自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();
      

      【讨论】:

      • 谢谢,我试过了,但是每个答案都只针对 .bmp 文件,没有一个这么简单
      • 我解决了您可能提到的问题。
      • 现在看起来好像找不到文件,即使它包含在解决方案中。
      • 另外我也不确定自己是不是很清楚,我编码的时候不喜欢使用设计师,所以功能区是用xml手工编码的
      猜你喜欢
      • 2012-03-19
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多