2011-04-25 75 views
9

Tôi đang làm việc trên một bổ trợ cấp ứng dụng Word 2007. Cho đến nay, tôi chưa gặp phải những trở ngại lớn ngoại trừ việc chuyển đổi giao diện Ribbon của trình bổ sung thành XML. Tôi phải sử dụng Ribbon XML vì tính năng tôi đang làm việc chỉ có thể được thực hiện theo cách này. Vấn đề là bằng cách chuyển sang Ribbon XML, tôi không thể truy cập giao diện vào thời gian chạy qua Globals.Ribbons nữa. Liên kết này http://msdn.microsoft.com/en-us/library/bb772088.aspx thực hiện một công việc tốt để giải thích cách truy cập vào Trình thiết kế hình ảnh nhưng nó hoàn toàn bỏ qua trường hợp XML Ribbon. Cụ thể, tôi cần có khả năng truy cập một số điều khiển hình ảnh như nhãn. Làm thế nào tôi có thể đạt được điều này?Có cách nào để truy cập Ribbon (XML) tại thời gian chạy không?

Trả lời

8

Globals.Ribbons là một tính năng thiết kế VSTO, nếu bạn sử dụng RibbonXML thì bạn không có tính năng này. Những gì các nhà thiết kế thực sự làm dưới vỏ là nó sẽ tạo ra xml ribbon cho Office, sau đó khi văn phòng gọi lại, VSTO sẽ tăng trình xử lý sự kiện thích hợp cho ngữ cảnh đó (tài liệu). Bởi vì bạn đang sử dụng RibbonXML bạn đang bỏ qua hỗ trợ thiết kế VSTO Ribbon hoàn toàn (tôi thích nó theo cách này, nó nhanh hơn và bạn có nhiều quyền kiểm soát hơn).

Với XML ribbon, bạn sẽ phải đăng ký gọi lại onLoad cho nhãn của bạn, Office sau đó sẽ chuyển cho bạn IRibbonControl, đó sẽ là nhãn và bạn có những thứ hạn chế bạn có thể làm. Nếu bạn muốn thay đổi văn bản sau đó ra khỏi đỉnh đầu của tôi, bạn sẽ phải đăng ký một cuộc gọi lại getText, sau đó vô hiệu hóa điều khiển ribbon đó, mà sẽ làm cho getback getText được đánh giá lại.

Có thêm thông tin về những gì bạn thực sự muốn đạt được sẽ là tiện dụng =) Tôi có cảm giác dự án contrib VSTO của tôi cũng sẽ giúp cuộc sống của bạn trở nên dễ dàng hơn nhiều, vì nó mang lại cho bạn nhiều tính năng Ribbon Designer đẹp mắt khi sử dụng ribbon xml . Nhưng hãy cho tôi biết bạn muốn làm gì và tôi có thể cung cấp cho bạn thêm thông tin về điều đó.

Chúc mừng, Jake

+0

Xin chào Jake. Cảm ơn câu trả lời. Tôi thực sự đã làm rất nhiều nghiên cứu kể từ khi tôi đăng câu hỏi này và tôi đã đi đến cùng một kết luận. Tôi vẫn hy vọng rằng ai đó tìm thấy một số cách để truy cập vào giao diện từ Global.Ribbons. Dù sao, tôi thực sự chuyển đổi giải pháp của mình và bây giờ tôi sử dụng RibbonXML và callbacks để thay đổi nhãn, hiển thị thông tin và thay đổi khả năng hiển thị của các điều khiển nhất định. – AlgolDocks

+0

Câu trả lời/câu trả lời của bạn Jake được đánh giá cao. MSDN dường như không bao gồm điều này bất cứ nơi nào. Việc vô hiệu hóa điều khiển hoạt động hoàn hảo. – Daniel

1

Khi nào bạn đang cố gắng truy cập Globals.ribbons?

Khi tôi nhớ lại, nó sẽ không được phổ biến cho đến khi gần hết giai đoạn khởi động của Word.

nếu bạn thử và truy cập quá sớm, sẽ không có bất kỳ dải băng nào được xác định.

+0

Tôi đang cố gắng để truy cập Globals.Ribbons từ Application_DocumentOpen đó là chức năng đó được gọi khi một tài liệu mới được mở ra. Vấn đề là điều này được sử dụng để làm việc cho Ribbon thiết kế trực quan. Tuy nhiên, sau khi chuyển đổi, Globals.Ribbons.Count luôn luôn là 0 mặc dù XML Ribbon được hiển thị. – AlgolDocks

3

Khi làm việc với Ribbon XML, tôi đã cố gắng này, nhưng tôi không thể truy cập vào các tài sản Ribbon1 từ Globals.Ribbons .. Thuộc tính đơn giản là không có ..

Tuy nhiên, tôi đã đưa ra một giải pháp khác về cơ bản phải làm với một dàn diễn viên thích hợp.

Trong 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; 
} 
Các vấn đề liên quan