如何扩展或派生 Microsoft RibbonFactory 创建的 RibbonToggleButton?

How do I extend or derive from the RibbonToggleButton created by the Microsoft RibbonFactory?

提问人:VA systems engineer 提问时间:9/16/2023 更新时间:9/19/2023 访问量:38

问:

在此方案中,我如何扩展/派生?RibbonToggleButton

我有一个 Microsoft Word VSTO 加载项。我的目标是创建一个扩展或派生自 .我想扩展/派生,因为我想通过至少一个自定义属性来扩展类。MyRibbonToggleButtonMicrosoft.Office.Tools.Ribbon.RibbonToggleButtonRibbonToggleButton

我的方法是观察一个是如何创建的,然后从我所看到的中派生类。Microsoft.Office.Tools.Ribbon.RibbonToggleButtonMyRibbonToggleButton

1. 我创建了一个新的 Word VSTO 项目

enter image description here

enter image description here

2.添加了一个功能区

enter image description here

3. 设计了功能区,添加了一个 RibbonToggleButton

enter image description here

当我检查设计器时,我可以看到一个对象是通过调用功能区的 .RibbonToggleButtonFactory.CreateRibbonToggleButton()

enter image description here

由于返回的对象类型是 ,我创建了一个自定义类并尝试从 派生。Microsoft.Office.Tools.Ribbon.RibbonToggleButtonRibbonToggleButton

enter image description here

这时我才意识到这是一个接口。因此,我的自定义类大约有 30 个左右未定义的属性、方法、事件等。我不想编写所有这些背后的代码。相反,我想利用 Microsoft 在基类中提供的属性、方法和事件,并且我想添加至少一个自定义属性。RibbonToggleButtonRibbonToggleButton

现在我遇到了麻烦,因为我很难理解一般的接口,更不用说如何扩展/派生接口了。我很困惑,因为我知道在运行时必须返回一个具体对象。同样:我想利用 Microsoft 在基类中提供的属性、方法和事件,并且我想添加至少一个自定义属性。RibbonToggleButtonFactory.CreateRibbonToggleButton()RibbonToggleButton

在此方案中,我如何扩展/派生?RibbonToggleButton

C# WinForms VSTO 扩展 派生类

评论

0赞 Dmitry Streblechenko 9/19/2023
不能从控件本身允许的范围之外派生或自定义控件。尝试更具体 - 您尝试自定义的究竟是什么,为什么?
0赞 VA systems engineer 9/19/2023
请执行 1-2-3 并在阅读以下内容时查看:我想自定义返回的对象的类,因为我需要单个对象和我的单个类对象(例如,)之间的双向关系。换句话说,当前定义了一个属性,我希望每个对象都有一个属性。Ribbon1.Designer1.csthis.Factory.CreateRibbonToggleButton()has-aRibbonToggleButtonSystem,Windows.Controls.UserControlMyUserControl : UserControlMyUserControlRibbonToggleButton AssociatedToggleButtonRibbonToggleButtonUserControl AssociatedUserControl

答:

0赞 Dmitry Streblechenko 9/19/2023 #1

你不能那样做,我不确定你为什么需要它。如果你能帮上忙,我也会避免使用功能区设计器 - 只需从你的代码中返回功能区 XML。

每个功能区控件都有一个 ID(在功能区 XML 中定义)。如果需要使自定义控件与功能区控件保持同步,请刷新功能区(通过调用 IRibbonUI.Invalidate 或 IRibbonUI.InvalidateControl)。这将导致功能区在控件上触发自定义回调(需要在功能区 XML 中指定它们),例如 getImage、getText 等。然后,您可以根据需要返回更新的信息。