You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoCAD .NET程序中WPF窗口静态资源加载失败的C#解决方案问询

解决AutoCAD .NET中WPF窗口静态资源加载失败的问题

我之前在开发AutoCAD .NET插件时也碰到过一模一样的问题——当把WPF窗口作为类库嵌入AutoCAD插件时,纯WPF里正常的静态资源加载会失效,原因很简单:AutoCAD作为宿主,不会像纯WPF应用那样自动处理资源字典的加载上下文,得我们手动指定资源的加载方式。

下面是两种靠谱的解决办法,你可以按需选择:

方法一:在AutoCAD命令中手动加载资源字典

修改你的Launch命令代码,在创建窗口实例前先把资源字典加载进去:

public class Class1
{
    public static WPFWindow.MainWindow mainWindow;

    [CommandMethod("Launch", CommandFlags.Session)]
    public void Launch()
    {
        // 1. 创建资源字典并指定正确的Pack URI
        var styleResources = new ResourceDictionary();
        // 这里要注意替换成你实际的程序集名称和资源路径
        styleResources.Source = new Uri(
            "pack://application:,,,/WPFWindow;component/Themes/Styles.xaml", 
            UriKind.Absolute
        );

        // 2. 初始化窗口并将资源字典添加到窗口的资源集合中
        mainWindow = new WPFWindow.MainWindow();
        mainWindow.Resources.MergedDictionaries.Add(styleResources);

        // 3. 显示窗口
        Autodesk.AutoCAD.ApplicationServices.Application.ShowModalWindow(mainWindow);
    }
}

方法二:把资源加载逻辑内置到WPF窗口中

如果你不想每次调用窗口都写加载代码,可以把资源加载放到WPF窗口的构造函数里,这样创建实例时自动加载资源:

// 这是WPFWindow项目中MainWindow.xaml.cs的代码
public partial class MainWindow : Window
{
    public MainWindow()
    {
        // 先加载资源字典
        var styleResources = new ResourceDictionary();
        styleResources.Source = new Uri(
            "pack://application:,,,/WPFWindow;component/Themes/Styles.xaml", 
            UriKind.Absolute
        );
        this.Resources.MergedDictionaries.Add(styleResources);

        // 再初始化组件
        InitializeComponent();
    }
}

这样你的AutoCAD命令代码就可以回到最初的简洁版本,不用再处理资源加载了。

关键注意事项

  • 确认你的资源文件(Styles.xaml)的生成操作设置为Resource(右键文件→属性→生成操作,选Resource),不然Pack URI找不到文件。
  • 检查Pack URI中的程序集名称(WPFWindow)是否和你的WPF类库项目的程序集名称一致(右键WPF项目→属性→应用程序→程序集名称)。

为什么纯WPF应用里没问题?

在纯WPF应用中,App.xaml会自动负责资源字典的加载,应用域会默认识别Pack URI的上下文。但AutoCAD作为宿主,加载的是你的类库而非完整WPF应用,没有这个自动加载的流程,所以必须手动初始化资源上下文。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:39:58