c# - 调用 WPF 窗口的 Excel 按钮

标签 c# .net wpf excel add-in

我有一个 CSharp (.NET) 应用程序,它在 Excel 中创建了一个带功能区的加载项。我在功能区中有按钮。我希望能够单击按钮并打开 WPF 窗口。

代码看起来像

 private void OnNewButtonAction(object sender, RibbonControlEventArgs e)
 {                    
      var window = new View.MyWindow()
      {
         DataContext = new ViewModel.MyViewModel(),
      };
      window.Show();
  }

其中 MyWindow 是一个类型为 System.Windows.Window 的类。 MyWindow 有它自己的 xaml 文件,其中有单选按钮、文本字段等。当我尝试运行它时 - 并单击按钮,我得到一个 XML 解析异常,因为 - “'Provide value on 'System.Windows.StaticResourceExtension' throw一个异常(exception)”。

是否可以从 excel 加载项调用 wpf 窗口?我做错了什么?

编辑:我已经看过了 Using WPF Controls in Office Solutions它不起作用。并且它为 excel 添加了一个单独的 Pane ,这不是我正在查看的内容。

最佳答案

您应该使用 Excel-DNA。这是一款非常有用的软件,专为此类事情而设计,它有助于使用 WPF 实现 Excel,您应该不会再遇到任何问题。

你可以得到它Here

但是,如果您不想这样做,这里有一个关于如何操作的分步教程。

您可以尝试将一个WPF 窗口定义为自定义控件并将其添加到word 的自定义 Pane 中。请查看以下链接:

Using WPF Controls in Office Solutions

您也可以查看此链接:

Office 2007 Excel Addin - WPF ComboBox Collapses when Expanded

我们将 WPF 控件添加到 custompane 的常用方法是:

  1. 创建 Excel 加载项项目

  2. 添加用户控件 (WPF) 名称 UserControl1 并添加对 System.xaml 的引用

  3. 编写WPF控件并成功构建项目

  4. 从窗体集合中添加用户控件,命名为UserControl2

  5. 拖放一个UserControl1到UserControl2,任意分配位置

  6. 以这种方式编写 ThisAddIn.cs:

     UserControl1 myWPF;
    
     UserControl2 winformControl;
    
     Microsoft.Office.Tools.CustomTaskPane pane;
    
     System.Windows.Forms.Integration.ElementHost myHost;
    
    
    
    
    
    
    
     private void ThisAddIn_Startup(object sender, System.EventArgs e)
     {
    
     myWPF = new UserControl1();
    
     winformControl = new UserControl2();
    
     pane = CustomTaskPanes.Add(winformControl, "WPFControl");
    
     pane.Visible = true;
    
     pane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight; 
     }
    

我们可以使用按钮来控制面板的可见属性。

关于c# - 调用 WPF 窗口的 Excel 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069471/

相关文章:

c# - WPF 数据网格 : How to Determine the Current Row Index?

asp.net - 是否有 Node.js 的 .NET 等价物?

c# - 如何在 XAML 中公开控件以便在其他类中看到

c# - 用于 C# 的 Mercurial API

c# - 使用具有多个参数的构造函数的依赖注入(inject)解析,这些参数的值在运行时确定 .NET Core 3

c# - 在 .NET 中将对象序列化为 UTF-8 XML

.NET 无法识别新安装的 GAC 程序集中的命名空间?

.net - 谁能帮我获取 math.round() 以获得以下输出

c# - 为什么 WPF PasswordBox 有时会变成空白,而其他时候却不会?

c# - WPF-棱镜 : How to close CustomPopupWindow with button click