Изображения Visual Studio с лентами (XML) - PullRequest
4 голосов
/ 21 августа 2011

Я делаю надстройки для Office 2007 и пытаюсь использовать XML вместо визуального дизайнера для настройки ленты, но по какой-то причине я не могу заставить изображение работать с ней ... Что именно вы должны сделать Added Я добавил ресурс png с именем Icon1 и попробовал это:

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

Не повезло ... не знаю почему. Даже если я добавлю полный путь к файлу, он не будет работать.

Я никогда не заставлял его работать один раз, поэтому, может быть, я просто не делаю это так, как это было сделано ...

Ответы [ 2 ]

10 голосов
/ 21 августа 2011

Очень сложное решение ... повезло найти его здесь

Сначала добавить атрибут 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));
        }
0 голосов
/ 23 августа 2016

намного проще, если вы введете следующий код:

<?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");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...