(2) 個別のアドインを使用しない限り、リボン デザイナーとリボン XMLの両方を使用する方法はありません。はIAddInExtension.CreateRibbonExtensibilityObject
、アドインのライフ サイクルで 1 回だけ呼び出されます。DesignerまたはXMLルートを使用してインターフェースを実装することを選択できます。これらは 2 つの別個の API フックです。
リボン デザイナは、Office リボンの開発に慣れていない人にとっては、より重要な役割を果たします。リボン XMLアプローチに慣れると、はるかに単純になり、動作をより細かく制御できます (OP で示しているように)。リボン デザイナー サーフェスからコンテキスト メニューを使用して、リボン デザイナーから XML に移行できます。ただし、モデルがまったく異なるため、画像とコールバックにいくらかの手直しがあります。リボン XMLはコンテキスト メニュー (非推奨) を拡張する唯一の方法であり、デザイナがないため Backstage ビューであるため、時間をかけてリボン XMLに投資する価値があります。CommandBars
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new ContactButtonOverrides();
}
次に、 ...リボン ID タイプのどのパスをContactButtonOverrides
介して、どの XML をロードするかをトリガーできます...IRibbonExtensibility.GetCustomUI
public string GetCustomUI(string ribbonID)
{
switch (ribbonID)
{
case "Microsoft.Outlook.Appointment" :
return GetResourceText("OutlookRibbonApp.IPM.Appointment.Ribbon.xml");
case "Microsoft.Outlook.Mail.Compose" :
return GetResourceText("OutlookRibbonApp.IPM.Note.Ribbon.xml");
default:
return "";
}
}
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
if (myCondition == true)
{
return Globals.Factory.GetRibbonFactory().CreateRibbonManager(
new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { new Ribbon1() });
}
else
{
return Globals.Factory.GetRibbonFactory().CreateRibbonManager(
new Microsoft.Office.Tools.Ribbon.IRibbonExtension[] { new Ribbon2() });
}
}