我们正在开发powerpoint插件。根据要求,我们需要为加载项应用程序实现通知功能。我们的Ribbon控件中已经有一些Ribbon按钮。我们需要在功能区按钮中添加徽章按钮以及现有按钮。
以下是我们正在寻找的示例徽章按钮。
我已经使用“Ribbon Button”,Split Button等进行了检查。但是我无法达到解决方案。这可能是一个要求吗?
有没有办法获取功能区位置按钮?我检查了功能区按钮属性,但未找到任何位置属性。如果我们获得功能区按钮的位置,我们可以在功能区按钮附近显示通知面板。
答案 0 :(得分:1)
最好的方法是为图像提供回调,并在返回图像时呈现通知。
请注意,您需要切换到功能区的XML定义(Visual Studio中的可视功能区设计器不支持图像回调/事件,据我记得,它仅支持琐碎的"单击&#34 ;事件)。使用"导出到XML"菜单项将功能区导出为XML,然后定义自定义图像回调。
这是一个有点相关的问题:How can I add the images to button using the ribbon xml?
应该这样做。请注意,如果要更改通知,则需要强制重新绘制;为此,你可以使用" onload"捕获功能区的事件,并调用"重绘"方法就可以了。
下面是一个几乎完整的示例,显示了功能区按钮上的自动递增数字。
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>
C#
[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");
}