C# 将通知徽章图标添加到外接程序中的功能区控件

C# 将通知徽章图标添加到外接程序中的功能区控件,c#,winforms,powerpoint,office-interop,add-in,C#,Winforms,Powerpoint,Office Interop,Add In,我们正在制作powerpoint加载项。根据需求,我们需要对外接程序应用程序实现通知功能。我们的功能区控件中已经有一些功能区按钮。我们需要在功能区按钮中添加一个徽章按钮以及现有按钮 下面是我们正在查看的示例徽章按钮 我已经用“功能区按钮”、“拆分按钮”等进行了检查,但无法找到解决方案。这是一个可能的要求吗 有没有办法获取功能区按钮的位置?我已检查功能区按钮属性,但未找到任何位置属性。如果我们得到功能区按钮的位置,我们可以在功能区按钮附近显示通知面板。最好的方法可能是为图像提供回调,并在返回图像

我们正在制作powerpoint加载项。根据需求,我们需要对外接程序应用程序实现通知功能。我们的功能区控件中已经有一些功能区按钮。我们需要在功能区按钮中添加一个徽章按钮以及现有按钮

下面是我们正在查看的示例徽章按钮

我已经用“功能区按钮”、“拆分按钮”等进行了检查,但无法找到解决方案。这是一个可能的要求吗


有没有办法获取功能区按钮的位置?我已检查功能区按钮属性,但未找到任何位置属性。如果我们得到功能区按钮的位置,我们可以在功能区按钮附近显示通知面板。

最好的方法可能是为图像提供回调,并在返回图像时呈现通知

请注意,您需要切换到功能区的XML定义,因为VisualStudio中的visual ribbon designer不支持图像回调/事件,据我所知,它只支持简单的单击事件。使用“导出为XML”菜单项将功能区导出为XML,然后定义自定义图像回调

这是一个有点相关的问题:

这样就可以了。请注意,当您想要更改通知时,需要强制重新绘制;为此,可以使用onload事件捕获功能区,并对其调用repaint方法

下面是一个几乎完整的示例,显示了功能区按钮上的自动递增数字

XML:


我想你可以定制彩带。谢谢你的解决方案。我会检查一下,然后把我的发现告诉你。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" 
          onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group id="MyGroup" label="My Group">
          <button id="MyButton" size="large" label="Button With Flag"
                  getImage="Ribbon_GetHelloImage" 
                  onAction="Ribbon_SayHello"  />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
[ComVisible(true)]
public class Ribbon1 : Office.IRibbonExtensibility
{
    private Office.IRibbonUI ribbon;
    private Timer timer = new Timer();

    public void Ribbon_Load(Office.IRibbonUI ribbonUI)
    {
        this.ribbon = ribbonUI;

        timer.Interval = 1000;
        timer.Start();
        timer.Tick += (sender, args) => ribbon.InvalidateControl("MyButton");
    }

    public Bitmap Ribbon_GetHelloImage(Office.IRibbonControl ctrl)
    {
        var bitmap = new Bitmap(32, 32);
        var flagGraphics = Graphics.FromImage(bitmap);
        flagGraphics.DrawString(DateTime.Now.Second.ToString(), 
            new Font(FontFamily.GenericSansSerif, 10), 
            Brushes.Red, 12, 0);

        return bitmap;
    }

    public void Ribbon_SayHello(Office.IRibbonControl ctrl)
    {
        MessageBox.Show("Hello", "Hello");
    }