2011-04-25 17 views
9

私はWord 2007のアプリケーションレベルのアドインで作業しています。これまでは、アドインのリボンインターフェイスをXMLに変換する以外に大きな障害はありませんでした。リボンのXMLを使用する必要があります。これは、私が取り組んでいる機能がこのようにしかできないためです。問題は、リボンXMLに切り替えることで、実行時にGlobals.Ribbons経由でインターフェイスにアクセスできなくなることです。このリンクhttp://msdn.microsoft.com/en-us/library/bb772088.aspxは、ビジュアルデザイナーリボンにアクセスする方法を説明していますが、XMLリボンの場合を完全に無視しています。具体的には、ラベルなどの視覚的なコントロールにアクセスできる必要があります。どうすればこれを達成できますか?実行時にリボン(XML)にアクセスする方法はありますか?

答えて

8

Globals.RibbonsはVSTOデザイナ機能です.RibbonXMLを使用する場合、この機能はありません。 デザイナーが実際にカバーしているのは、Office用のリボンxmlを作成し、オフィスがコールバックを行うと、そのコンテキスト(ドキュメント)の適切なイベントハンドラが呼び出されます。 RibbonXMLを使用しているため、VSTOリボンデザイナのサポートを完全にバイパスしています(この方法が好きです。より速く、より多くのコントロールが可能です)。

リボンXMLを使用すると、ラベルにonLoadコールバックを登録する必要があります.OffbonControlがラベルとして渡されます。ラベルは、あなたに渡すことができます。テキストを変更して頭の上から外したい場合は、getTextコールバックを登録してから、そのリボンコントロールを無効にする必要があります。これにより、getTextコールバックが再評価されます。

あなたが実際に成し遂げたいことについてもっと多くの情報を持っていれば便利だろう=)私はVSTO contribプロジェクトもあなたの人生をもっと楽にしてくれると感じています。リボンxml 。しかし、あなたがしたいことが何であるか教えてください。私はあなたにそれについてのより多くの情報を与えることができます。

乾杯、 ジェイク

+0

こんにちはジェイク。答えをありがとう。私はこの質問を投稿してから実際に多くの研究を行い、同じ結論に達しました。私はまだ誰かがGlobal.Ribbonsからインターフェイスにアクセスする何らかの方法を見つけたことを期待していました。とにかく、私は実際に私のソリューションを変換しました。そして今、私はラベルを変更し、情報を表示し、特定のコントロールの可視性を変更するためにRibbonXMLとコールバックを使用します。 – AlgolDocks

+0

あなたの応答/答えジェイクは非常に感謝しています。 MSDNはこれをどこでもカバーしているようではありません。コントロールの無効化は完全に機能しました。 – Daniel

1

いつGlobals.ribbonsにアクセスしようとしていますか?

私が思い出したように、Wordの起動フェーズの終わり近くになるまでは、このファイルは作成されません。

早すぎてアクセスしようとすると、まだリボンが定義されていません。

+0

私は、新しいドキュメントが開かれたときに呼び出される関数ですApplication_DocumentOpenからGlobals.Ribbonsにアクセスしようとしています。これは、ビジュアルデザイナーリボンのために使用されていたことです。ただし、切り替え後、XMLリボンは表示されますが、Globals.Ribbons.Countは常に0です。 – AlgolDocks

3

リボンXMLを扱う場合、

..財産シンプルがありませんでした..私はこれを試してみましたが、私はGlobals.RibbonsからRibbon1プロパティにアクセスできませんでしたしかし、私は基本的に適切な型キャストとは別の解決策を考え出しました。 ThisAddIn.csで

private Microsoft.Office.Core.IRibbonExtensibility ribbonObj; 
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject() 
{ 
ribbonObj = new Ribbon1(this); 
return ribbonObj; 
} 

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
// Calling the public method TEST() in Ribbon1.cs 
//MyNameSpace is the namespace used in your project ie., your project name 
((MyNameSpace.Ribbon1)ribbonObj).TEST(); 
// Calling the public variable flag in Ribbon1.cs 
((MyNameSpace.Ribbon1)ribbonObj).flag; 
} 
関連する問題