0

我正在使用 XML 创建一个自定义 Excel 功能区,其中有一个包含图像的按钮。我希望能够在按下按钮(如切换)时更改此图像以显示它所处的状态。我有以下 XML 来描述按钮:

<button id="MyButton"
            label="MyLabel"
            screentip="Some useful info."
            onAction="MyAction"
            getImage="GetImage"
            size="large"/>

其中MyAction方法定义为:

public void MyAction(Office.IRibbonControl control)
{
     // Change button image here...
}

有什么方法可以在MyAction()方法中更改按钮的图像吗?

干杯

4

3 回答 3

4

编辑:对不起,我刚刚意识到这是在 C# 论坛上,我用 VB 编写了函数。您需要我将代码翻译成 C# 吗?请注意,回调行为应该相同。

我发现更新控件的最简单方法是使控件或整个功能区无效,并通过控件的回调(如 getImage、getVisible、getLabel 等)更新参数我在这里写的内容适用于任何控件的参数(标签,启用,可见,...)

因此,如果您以这种方式在 XML 中定义按钮:

<button id="MyButton"
        label="MyLabel"
        onAction="OnAction"
        getImage="GetImage"/>

然后,您可以使用 OnAction 回调以这种方式更新按钮的参数(假设您有一个名为condition的布尔变量):

Public Sub OnAction(ByVal control As Office.IRibbonControl)

    // Do your button stuff here

    condition = Not condition

    gui.InvalidateControl(control.Id)

End Sub

然后按钮的回调将被调用,对于 getImage 你可以使用:

Public Function GetImage(ByVal control As Office.IRibbonControl) As String

    If condition Then
        Return "MacroPlay"
    Else
        Return "DeclineInvitation"
    End If

End Function

请注意,要使所有这些工作,您需要将功能区存储到gui变量中。为此,您需要在 XML 中使用:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnRibbonLoad"> ...

并在代码中:

Public Sub OnRibbonLoad(ByVal ribbon As Office.IRibbonUI)

    gui = ribbon

End Sub
于 2013-01-10T15:34:16.340 回答
0
<button id="MyButton" label="MyLabel" onAction="OnAction" getImage="GetImage"/>

上面的解决方案对我有用。只要确保您没有在您的 customUI xml 节点上使用 loadImage 事件。看起来如果您同时使用 loadImage 和 GetImage 则插件无法加载。

于 2013-04-17T18:11:41.263 回答
0

看起来你是对的。我发现编辑自定义功能区元素外观的唯一方法是使用“功能区(可视化设计器)”而不是 XML。

例如,如果我想更改名为的切换按钮上的图像,toggleButton1我可以执行以下操作:

public void toggleButton1_Click(object sender, RibbonControlEventArgs e)
{
    toggleButton1.Image = GetImage(toggleButton1.Checked);
}

其中GetImage定义为:

public Bitmap GetImage(bool pressed)
{      
    return new Bitmap(pressed ? Properties.Resources.img_1 : Properties.Resources.img_2);
}

干杯

于 2012-10-25T07:00:31.523 回答