You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VS新SDK格式项目设计时加载资源字典的问题求助

解决WPF SDK格式类库项目XAML设计器资源配置问题

我之前也碰到过一模一样的迁移问题,折腾了好一阵才找到微软官方推荐的标准方案,刚好能解决你不想修改上千个XAML文件的需求,下面一步步说:

1. 创建全局设计时资源文件

首先在项目的Properties文件夹下新建一个DesignTimeResources.xaml文件,内容用来合并你所有的全局资源字典,示例代码如下:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <!-- 替换成你实际的资源字典路径 -->
        <ResourceDictionary Source="/MyAssembly;component/Resources/ResourceBundle.xaml"/>
        <!-- 可以继续添加其他需要在设计时加载的资源字典 -->
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

2. 在csproj中配置设计时资源

SDK格式的项目不再需要手动写复杂的Page节点配置,只需要在你的.csproj文件中添加下面的配置块:

<ItemGroup>
  <DesignTimeResources Include="Properties\DesignTimeResources.xaml" />
</ItemGroup>

这个DesignTimeResources是SDK格式专门为WPF类库设计的项类型,会自动被XAML设计器识别并加载,完全替代了旧格式里的ContainsDesignTimeResources属性配置。

为什么之前的方法失效?

旧格式里手动标记Page并设置ContainsDesignTimeResources=true的方式,在SDK格式项目中已经被废弃了——新的项目系统对XAML文件的编译逻辑做了调整,不再识别这个属性,所以才会出现配置无效的情况。

注意事项

  • 确保资源字典的路径正确:如果是当前项目内的资源,用/AssemblyName;component/路径的格式,AssemblyName要和你项目的程序集名称一致;如果是引用的其他项目资源,路径要写成pack://application:,,,/OtherAssembly;component/路径
  • 配置完成后,重启Visual Studio或者重新加载项目,设计器才会加载新的资源配置,语法补全和控件显示功能就能恢复正常了。

这个方案是微软官方推荐的全局设计时资源配置方式,只需要配置一次,所有XAML文件的设计器都会自动共享这些资源,完全不需要逐个修改XAML文件里的资源引用。

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

火山引擎 最新活动