1

先上代码:

以编程方式将按钮添加到功能区:

for (int i = 0; i < titles.Length; i++)
{
    RibbonButton button = this.Factory.CreateRibbonButton();
    button.Visible = false;
    button.Label = titles[i];
    button.Image = OutlookAddIn1.Properties.Resources.Sans_titre_5;
    button.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge;
    this.group1.Items.Add(button);
}

以编程方式显示/隐藏一些按钮:

private void showOrHide(contact){
    // Building a phone array with the contact infos...
    RibbonButton button = Globals.Ribbons.Ribbon1.ribbonButtons.ElementAt(i).Value;
    button.Visible = button.Enabled = phones[i] != null;
}

我在我的所有contactItems.open 上绑定了一个事件,它调用了这个方法:

private void Event(ref bool asd)
{
    Outlook.Selection selection = Globals.ThisAddIn.Application.ActiveExplorer().Selection;
    if (selection.OfType<Outlook.ContactItem>().Count() == 1)
    {
        Outlook.ContactItem contact = selection.OfType<Outlook.ContactItem>().FirstOrDefault();
        showOrHide(contact);
    }
}

你能看到吗,我试图在我的功能区中显示/隐藏按钮,具体取决于联系人是否具有某种电话号码类型。

我第一次打开联系人时,功能区按钮会正确显示/隐藏:

有用

但是当我选择另一个联系人(或同一个)时,它会显示我所有的按钮,没有标签图像,即使它们是可见的=假:

不工作。

我的猜测是,当我第一次关闭联系窗口时,outlook 会破坏我的功能区按钮。所以当我打开另一个时,功能区按钮都乱七八糟了。有人有想法吗?

4

1 回答 1

-1

使用方法将功能区控件添加到加载项。它比较可靠。

将 Visual Studio 中的功能区 xml 添加到您的解决方案,然后您可以将控件添加到功能区,如下所示。

<tab idMso="TabAddIns">  
    <group id="ContentGroup" label="Content">  
        <button id="textButton" label="Insert Text"  
             screentip="Text" onAction="OnTextButton"  
             supertip="Inserts text at the cursor location."/>  
        <button id="tableButton" label="Insert Table"  
             screentip="Table" onAction="OnTableButton"  
             supertip="Inserts a table at the cursor location."/>  
    </group>  
</tab> 

您可以为事件定义回调并在运行时为它们声明标签和其他属性。您可以通过为控件的“getVisible”属性声明回调方法来使功能区控件无效并控制其可见性。

于 2017-02-27T11:04:57.713 回答