我有一个 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 的常用方法是:
创建 Excel 加载项项目
添加用户控件 (WPF) 名称 UserControl1 并添加对 System.xaml 的引用
编写WPF控件并成功构建项目
从窗体集合中添加用户控件,命名为UserControl2
拖放一个UserControl1到UserControl2,任意分配位置
以这种方式编写 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/