添加 WPF 命名空间导致 VSTO 编译错误

Kri*_*per 5 c# wpf xaml vsto namespaces

我在 VSTO 项目中遇到一个奇怪的错误,其中 XAML 文件导致不相关的代码中出现构建错误。

这是我所做的

  1. 创建一个新的 Excel 2010 加载项项目(此处名为 TestAddIn)

  2. 修改ThisAddIn_Startup为读取

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Worksheet w = Globals.ThisAddIn.Application.Workbooks[1].Sheets[1];
        w.Rows[1].Font.Bold = true;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 构建项目。构建应该成功。

  4. 将 WPF 用户控件作为新项添加到项目中。您还需要添加System.Xaml作为项目参考。

  5. 再次构建项目。构建应该成功。

  6. 修改UserControl1.xaml读取

    <UserControl x:Class="TestAddIn.UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:Test="clr-namespace:TestAddIn" <!-- Add this line -->
                 >
        <Grid>
    
        </Grid>
    </UserControl>
    
    Run Code Online (Sandbox Code Playgroud)
  7. 构建项目。构建失败并显示错误消息

    “object”不包含“Font”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“Font”(您是否缺少 using 指令或程序集引用?)

在 UserControl1.xaml 中删除或添加命名空间行将导致构建成功或失败。

我对此感到非常困惑,因为 WPF 文件与加载项文件没有直接关系。我想一定是链接有问题?

我意识到我可以通过执行显式转换来解决这个问题(((Range)w.Rows[1]).Font.Bold = true)。但我真的不想到处这样做。

如何解决此问题,以便我的 VSTO 项目中可以有 WPF 文件?

XAM*_*eLi 1

尝试;assembly=在 xmlns 声明的末尾添加。就像这样:

xmlns:Test="clr-namespace:TestAddIn;assembly="
Run Code Online (Sandbox Code Playgroud)