5 votes

Images Visual Studio avec rubans (XML)

Je crée des modules complémentaires pour Office 2007 et j'essaie d'utiliser XML au lieu du concepteur visuel pour personnaliser le ruban, mais pour une raison quelconque, je n'arrive pas à faire fonctionner une image avec... Que devez-vous faire exactement ? J'ai ajouté une ressource png appelée Icon1 et j'ai essayé ceci :

<?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>

Pas de chance... je ne sais pas trop pourquoi. Même si je mets le chemin complet du fichier, cela ne fonctionne pas.

Je n'ai jamais réussi à le faire fonctionner une seule fois, alors peut-être que je ne le fais pas de la manière dont il doit être fait...

11voto

Mark Points 2437

Une solution très compliquée... une chance de la trouver. aquí

Premier ajouter l'attribut loadImage à l'onglet CustomUI,

Puis pour simplifier les choses, ajoutez cette classe interne

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

Suivant ajouter la définition de la fonction loadImage,

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

1voto

Jil Points 11

C'est beaucoup plus facile si vous faites le code suivant :

<?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>

dans le ruban 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");
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X