2011-04-25 3 views
9

나는 Word 2007 응용 프로그램 수준의 추가 기능을 사용하고 있습니다. 지금까지 추가 기능의 리본 인터페이스를 XML로 변환하는 것을 제외하고는 큰 장애물을 경험하지 못했습니다. 내가 작업중인 기능은이 방법으로 만 수행 할 수 있기 때문에 리본 XML을 사용해야합니다. 문제는 리본 XML로 전환하여 Globals.Ribbons를 통해 런타임에 인터페이스에 더 이상 액세스 할 수 없다는 것입니다. 이 링크 http://msdn.microsoft.com/en-us/library/bb772088.aspx은 Visual Designer 리본에 액세스하는 방법을 설명하지만 XML 리본 케이스는 완전히 무시합니다. 특히 레이블과 같은 시각적 컨트롤에 액세스 할 수 있어야합니다. 이것을 어떻게 할 수 있습니까?런타임에 리본 (XML)에 액세스하는 방법이 있습니까?

답변

8

Globals.Ribbons는 VSTO 디자이너 기능이므로 RibbonXML을 사용하는 경우이 기능이 없습니다. 디자이너가 실제로 커버에서 수행하는 작업은 Office 용 리본 xml을 만든 다음 사무실에서 콜백을하면 VSTO가 해당 컨텍스트 (문서)에 적절한 이벤트 처리기를 발생시킵니다. RibbonXML을 사용하기 때문에 VSTO 리본 디자이너 지원을 완전히 건너 뛸 수 있습니다 (나는 이렇게하는 것이 더 좋으며 더 빨라지고 더 많은 제어가 가능함).

리본 XML을 사용하면 레이블에 onLoad 콜백을 등록해야합니다. 그러면 Office에서 레이블이 될 IRibbonControl을 전달하고 사용자가 할 수있는 일을 제한합니다. 텍스트를 변경하고 싶다면 getText 콜백을 등록한 다음 리본 컨트롤을 무효화해야 getText 콜백이 다시 평가됩니다.

실제로 달성하고 싶은 것에 대한 자세한 정보가 있으면 편리 할 것입니다.) 리본 메뉴를 사용할 때 내 VSTO contrib 프로젝트는 여러분의 삶을 훨씬 더 쉽게 만들어 줄 것이라고 생각합니다. . 그러나 내가하고 싶은 일이 무엇인지 알려 주시면 그에 관한 더 많은 정보를 드릴 수 있습니다. ..

건배, 제이크

+0

안녕하세요. Jake. 답변 해주셔서 감사합니다. 나는이 질문을 게시 한 이래로 실제로 많은 연구를했고 나는 같은 결론에 도달했다. 나는 여전히 누군가가 Global.Ribbons에서 인터페이스에 액세스 할 수있는 방법을 찾길 바랬다. 어쨌든 실제로 솔루션을 변환 한 후 RibbonXML 및 콜백을 사용하여 레이블을 변경하고 정보를 표시하며 특정 컨트롤의 가시성을 변경합니다. – AlgolDocks

+0

귀하의 답변/답변 Jake 매우 감사합니다. 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; 
} 
관련 문제