2011-08-21 31 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"); 
    }