Visual studio Office Fluent功能区回调函数以获取控件的当前状态。。?

Visual studio Office Fluent功能区回调函数以获取控件的当前状态。。?,visual-studio,vsto,Visual Studio,Vsto,我在Visual Studio中使用VB.Net创建了我的第一个VSTO加载项for Excel。通常情况下,我很难在功能区回调上绞尽脑汁。我已经让他们工作了,但我有一个问题我找不到答案: 是否有功能区回调函数可直接获取控件的状态 例如,要将功能区与类进行比较,大多数“可单击”控件在单击时会触发onAction回调,这些控件可以被视为事件。复选框和togglebutton等多状态控件具有getPressed回调以设置其当前状态,这些控件可以作为属性集方法。类似地,基于文本的控件具有getText

我在Visual Studio中使用VB.Net创建了我的第一个VSTO加载项for Excel。通常情况下,我很难在功能区回调上绞尽脑汁。我已经让他们工作了,但我有一个问题我找不到答案:

是否有功能区回调函数可直接获取控件的状态

例如,要将功能区与类进行比较,大多数“可单击”控件在单击时会触发
onAction
回调,这些控件可以被视为事件。复选框和togglebutton等多状态控件具有
getPressed
回调以设置其当前状态,这些控件可以作为属性集方法。类似地,基于文本的控件具有
getText
回调

但是有没有与属性Get方法等价的方法呢。。?根据回调的反向性质,这些回调可能是以
set
开头的回调,例如
setPressed
setText
…但我还没有找到任何回调


难道它们不存在吗?因为
get
实际上是
set
,反之亦然

没有回调来获取这些属性的值-因为您是设置各种值的人,您应该在内部存储这些值,从而为功能区和代码公开它们。

没有回调来获取这些属性的值-因为您是设置各种值的人,您应该在内部存储这些值,从而为功能区和代码公开它们。

VSTO功能区设计器“包装”了功能区XML,以便开发人员能够以类似于使用Windows窗体控件的方式使用基本控件。这意味着可以在运行时读取和写入属性(XML中的属性),而不是通过回调。此外,功能区控件对象公开事件,而不是开发人员需要编写事件回调代码

(请注意,对于更复杂的内容,有必要使用Ribbon XML。设计器实际上只适用于从工具箱中添加的基本控件。)

文件是。下面是一个要演示的小示例

例如,已将
下拉列表
控件添加到名为
DropDown1
的功能区组中。它可以在代码文件
Ribbon1.Designer.cs
中找到,其中声明为

internal Microsoft.Office.Tools.Ribbon.RibbonDropDown dropDown1;
并以

// dropDown1
// 
ribbonDropDownItem1.Label = "Item0";
ribbonDropDownItem2.Label = "Item1";
ribbonDropDownItem3.Label = "Item2";
ribbonDropDownItem4.Label = "Item3";
this.dropDown1.Items.Add(ribbonDropDownItem1);
this.dropDown1.Items.Add(ribbonDropDownItem2);
this.dropDown1.Items.Add(ribbonDropDownItem3);
this.dropDown1.Items.Add(ribbonDropDownItem4);
this.dropDown1.Label = "dropDown1";
this.dropDown1.Name = "dropDown1";
this.dropDown1.SelectionChanged += new System.EventHandler<Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs>(this.dropDown1_SelectionChanged);
VSTO功能区设计器“包装”功能区XML,以便开发人员能够以类似于使用Windows窗体控件的方式使用基本控件。这意味着可以在运行时读取和写入属性(XML中的属性),而不是通过回调。此外,功能区控件对象公开事件,而不是开发人员需要编写事件回调代码

(请注意,对于更复杂的内容,有必要使用Ribbon XML。设计器实际上只适用于从工具箱中添加的基本控件。)

文件是。下面是一个要演示的小示例

例如,已将
下拉列表
控件添加到名为
DropDown1
的功能区组中。它可以在代码文件
Ribbon1.Designer.cs
中找到,其中声明为

internal Microsoft.Office.Tools.Ribbon.RibbonDropDown dropDown1;
并以

// dropDown1
// 
ribbonDropDownItem1.Label = "Item0";
ribbonDropDownItem2.Label = "Item1";
ribbonDropDownItem3.Label = "Item2";
ribbonDropDownItem4.Label = "Item3";
this.dropDown1.Items.Add(ribbonDropDownItem1);
this.dropDown1.Items.Add(ribbonDropDownItem2);
this.dropDown1.Items.Add(ribbonDropDownItem3);
this.dropDown1.Items.Add(ribbonDropDownItem4);
this.dropDown1.Label = "dropDown1";
this.dropDown1.Name = "dropDown1";
this.dropDown1.SelectionChanged += new System.EventHandler<Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs>(this.dropDown1_SelectionChanged);

我们讨论的是Ribbon XML还是VSTO的Ribbon Designer?嗯……两者都有?除非我误解了我使用的工具,否则Ribbon Designer用于生成Ribbon使用的XML。。?至少,我一直都是这样使用它的。我将RD用于粗略布局,导出XML,然后使用所需的任何额外属性(例如各种回调的属性)对其进行调整。不同之处在于,使用功能区设计器可以为您做到这一点-它使使用功能区控件与使用Windows窗体控件几乎一样。使用属性和事件而不是回调。功能区XML中没有
Set
回调,因为没有处理它们的事件-回调需要触发器。所以“设置”是“get”(和其他)回调的一部分。好的,我使用RD,它导出
ribbon.xml
ribbon.vb
。之前我说我调整了XML,但我忘了说我也调整了生成的VB文件。这就是我为
onAction
getPressed
等创建sub和函数的地方。我还添加了处理无法识别的控件签名的功能,这非常有用。这听起来像你说的吗?我很好奇您如何描述如何使用属性和事件而不是回调。你能详细说明一下吗,或者给我指一些阅读材料,让我了解一下吗?我将写一个答案,因为注释不允许很好地使用示例…我们讨论的是Ribbon XML还是VSTO的Ribbon Designer?嗯…两者都有?除非我误解了我使用的工具,否则Ribbon Designer用于生成Ribbon使用的XML。。?至少,我一直都是这样使用它的。我将RD用于粗略布局,导出XML,然后使用所需的任何额外属性(例如各种回调的属性)对其进行调整。不同之处在于,使用功能区设计器可以为您做到这一点-它使使用功能区控件与使用Windows窗体控件几乎一样。使用属性和事件而不是回调。功能区XML中没有
Set
回调,因为没有处理它们的事件-回调需要触发器。所以“设置”是“get”(和其他)回调的一部分。好的,我使用RD,它导出
ribbon.xml
ribbon.vb
。之前我说我调整了XML,但我忘了说我也调整了生成的VB文件。这就是我为onActio创建subs和函数的地方