Как получить пользовательский объект панели задач в классе управления лентой

Разрабатывая проект Excel vsto, как я могу обрабатывать настраиваемую панель задач в классе, который является элементом управления ленты. Например, я хотел бы показать настраиваемую панель задач, когда я нажимаю кнопку элемента управления ленты.

Дора


person user972746    schedule 30.10.2011    source источник


Ответы (3)


Я предполагаю, что вы работаете с надстройкой Excel VSTO с Ribbon Visual Designer. Вы можете добиться того, чего хотите, сделав свою настраиваемую панель задач доступной через свойство надстройки:

public partial class ThisAddIn
{
   private CustomTaskPane taskPane; 
   internal CustomTaskPane TaskPane
   {
      get
      {
         return this.taskPane;
      }
   }

... и добавление кнопки на ленту и добавление обработчика событий для события click, доступ к надстройке через Globals:

private void MyRibbonButton_Click(object sender, RibbonControlEventArgs e)
{
   Globals.ThisAddIn.TaskPane.Visible = true;
}

Недавно я написал сообщение, в котором описывает процесс, может оказаться полезным. Это также возможно с помощью ленты xml.

person Mathias    schedule 06.11.2011

Этого можно добиться с помощью пользовательского элемента управления Win Forms. Я работал над проектом, в котором мы должны были расширить MS Word и нуждались в этой функциональности, но тот же пример применим и к Excel.

Еще один интересный способ, на который я наткнулся в сети, заключается в том, чтобы иметь пользовательский элемент управления Windows и размещать пользовательский элемент управления WPF внутри элемента управления Windows! Это, конечно, позволяет вам воспользоваться всеми замечательными инструментами, которые вы получаете с WPF, вот пример:

1) Перетащите ToggleButton на ленту (Visual Designer). Это будет использоваться, чтобы скрыть панель задач. Использование ToggleButton — хороший выбор, так как при нажатии он выделяется.

2) Добавьте приведенный ниже код в событие щелчка ToggleButton.

 Globals.ThisAddIn.TaskPane.Visible = ((RibbonToggleButton)sender).Checked;

3) Добавьте ссылку из вашего проекта на следующую сборку - WindowsFormsIntegration

4) В файле ThisAddIn.cs добавьте две директивы using, перечисленные ниже:

   using Microsoft.Office.Tools;
   using System.Windows.Forms.Integration;

5) Добавьте два пользовательских элемента управления

5.1) Пользовательский элемент управления (имя - taskPaneControl1)

5.2) Пользовательский контроль (WPF), (имя - кон)

Использование имен, которые я использовал, поможет при копировании/вставке приведенного ниже кода, но в любом случае измените его, если хотите.

6) Добавьте приведенный ниже код в класс ThisAddIn.cs.

public CustomTaskPane TaskPane
{
    get{return taskPaneValue;}
}

private TaskPaneControl taskPaneControl1;
private CustomTaskPane taskPaneValue;
private WpfControl con;

internal void AddTaskPane()
{
    ElementHost host = new ElementHost();
    con = new WpfControl();
    host.Child = con;
    host.Dock = DockStyle.Fill;
    taskPaneControl1 = new TaskPaneControl();
    taskPaneControl1.Controls.Add(host);
    taskPaneValue = this.CustomTaskPanes.Add(taskPaneControl1, "My Taskpane");
    taskPaneValue.Visible = true;
}

6) Добавьте два приведенных ниже кода в событие запуска в файле ThisAddIn.cs.

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
AddTaskPane();
taskPaneValue.Visible = false;
}

Когда приложение MS Office открыто, панель задач будет скрыта, переключите свойство Visible, чтобы изменить это в событии Startup. Перейдите к ToggleButton и нажмите его несколько раз, чтобы убедиться, что панель задач отображается должным образом.

Также взгляните на следующую ссылку, откуда пришла большая часть моего кода — http://xamlcoder.com/cs/blogs/joe/archive/2007/07/17/using-wpf-with-vsto-office-2007.aspx

person Denys Wessels    schedule 22.11.2011

Это сложная задача, поскольку лента и панели задач являются отдельными объектами. Одна из основных проблем заключается в том, что для каждого инспектора существует только один экземпляр класса Ribbon и несколько экземпляров панели задач. Для этого должным образом требуется некоторое углубленное понимание внутренностей Office.

Решение также зависит от того, используете ли вы Ribbon XML или Ribbon Designer. Какой подход вы используете?

person SliverNinja - MSFT    schedule 02.11.2011