在VSTO中使用WPF工具栏替换原有的Ribbon1需要一些步骤。这里将详细介绍如何实现此任务:
- 首先我们要创建一个新的WPF用户控件,来设计我们的WPF工具栏。
- 完成设计后,为了把这个WPF用户控件与VSTO项目集成,我们需要创建一个元素主机(ElementHost),然后将我们的WPF用户控件添加到此元素主机中。
- 创建 Ribbon (Visual Designer)项,而不是Ribbon (XML)
- 删除ribbon1.xml,因为我们将直接向核心工程添加自定义的WPF控件。
下面是更详细的步骤以及代码示例,显然你需要微调才能满足特定需求:
public partial class Ribbon1 : Ribbon { public Ribbon1() { InitializeComponent(); } private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { } private WPFToolbar _wpfToolbar; private ElementHost _elementHost; private void Button_Click(object sender, RibbonControlEventArgs e) { if (_elementHost == null || _wpfToolbar == null) { _wpfToolbar = new WPFToolbar(); //这个就是你创建的WPF用户控件 _elementHost = new ElementHost { Child = _wpfToolbar }; } if (Globals.ThisAddIn.Application.ActiveWindow.SplitVertical != 0) { Globals.ThisAddIn.Application.ActiveWindow.SplitVertical = 0; } Globals.ThisAddIn.Application.ActiveWindow.SplitHorizontal = 150; //设置工具栏的大小 Globals.ThisAddIn.Application.ActiveWindow.SplitColumn = 0; //设置工具栏在窗口中的位置 Globals.ThisAddIn.Application.ActiveWindow.ActivePane.Controls.AddControl(_elementHost, Left: 0, Top: 0, Width: _elementHost.Width, Height: _elementHost.Height); //添加工具栏到窗口 } }
使用WPF工具栏替换原有的Ribbon目前个人看来不是个好的解决方案,因为样式协调性不如Ribbon,如有人有更好的解决方案欢迎给我留言,谢谢!
另外,最近我遇到了插件需要在WPS中和WORD中都展示的问题,可不知道为什么,做出来的图标不好看,有相似解决方案的人如果给我留将不胜感激,谢谢!