2011-08-21 120 views
4

我正在制作Office 2007插件,我试图使用XML而不是可视化设计器来自定义功能区,但出于某种原因,我无法获取图像以使用它。 。你究竟做了什么‽我添加了一个名为Icon1的资源png,并尝试过:带有丝带的Visual Studio图像(XML)

<?xml version="1.0" encoding="UTF-8"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load"> 
     <ribbon startFromScratch="false"> 
     <tabs> 
      <tab id="TabToolss" label="Tools"> 
      <group id="MyGroup" label="My Group" visible="true"> 
       <button 
       id="Button1" 
       image="WordAddIn1.Properties.Resources.Icon1" 
       onAction="Button1_Click" 
       showImage="true" 
       /> 
      </group> 
      </tab> 
     </tabs> 
     </ribbon> 
    </customUI> 

不幸运...不知道为什么。即使我把完整的文件路径放在那里,它也不起作用。

我从来没有得到它的工作一次,所以也许我只是没有做它,它是为了做的方式...

回答

9

非常复杂的解决方案......幸运地找到它here

首先附加的LoadImage属性CustomUI标签,

然后把事情简单化,添加这个内部类

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

接下来的LoadImage函数的添加定义,

public IPictureDisp Ribbon_LoadImage(string imageName) 
     { 
      return PictureConverter.ImageToPictureDisp((Bitmap)Resources.ResourceManager.GetObject(imageName)); 
     } 
+2

+1 Tha这正是我所期待的。用Wordd-Addin试用它,它在我看来像PictureConverter不需要那里 - 我可以直接从我的项目资源成功返回一个位图。鉴于[转换位图到IPictureDisp]中的信息(http://blogs.msdn.com/b/rgregg/archive/2006/11/27/converting-bitmaps-to-ipicturedisp.aspx)我想知道是否需要PictureConverter只在Outlook-Addins中。 – Matthias

+1

+1给Mark。直接链接到MarkLator引用的是[Loading Images](https://msdn.microsoft.com/zh-cn/library/aa338202.aspx#OfficeCustomizingRibbonUIforDevelopers_Images),它是链接标记中提供的子主题。 – nam

0

它是一个容易得多,如果你做下面的代码:

<?xml version="1.0" encoding="UTF-8"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"onLoad="Ribbon_Load> 
<ribbon startFromScratch="false"> 
    <tabs> 
    <tab id="TabToolss" label="Tools"> 
     <group id="MyGroup" label="My Group" visible="true"> 
     <button id="Button1" size="normal" getImage="Icon1" 
     onAction="Button1_Click" 
     showImage="true"/> 
    </group> 
    </tab> 
</tabs> 
</ribbon> 

功能区中的CS:

namespace Add_in 
{ 
[ComVisible(true)] 
public class MyRibbon : Office.IRibbonExtensibility 
{ 
    private Office.IRibbonUI ribbon; 

    public MyRibbon() 
    { 

    } 

    public Bitmap Icon1(Office.IRibbonControl control) 
    { 
     return (Bitmap)Properties.Resources.ResourceManager.GetObject("Icon1"); 
    }