在App.xaml中使用ResourceDictionary的自动补全及设计时错误问题
这个跨项目引用样式的问题我之前也碰到过,VS设计器在处理跨项目资源的时候确实有点“迟钝”,给你几个亲测有效的解决步骤:
先确认项目引用是否到位
首先得保证Program.View.csproj已经添加了对Program.Startup.csproj的项目引用。右键Program.View项目 → 添加 → 项目引用,勾选Program.Startup就行。要是没这层引用,设计器根本找不到资源所在的项目,自然会报“未找到”。改用Pack URI格式引用资源
原来的相对路径在跨项目场景下,设计器经常识别不了,换成Pack URI格式就靠谱多了。把App.xaml里的资源引用改成:<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/Program.Startup;component/Styles/MyStyles.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>这里要注意:
Program.Startup是你样式所在项目的程序集名称,得和Program.Startup.csproj里的AssemblyName保持一致;后面的/Styles/MyStyles.xaml就是资源文件在该项目里的相对路径。清理重建+刷新设计器
改完路径后,先把当前打开的XAML设计器关掉,然后依次做:清理整个解决方案(菜单→生成→清理解决方案)→ 重建解决方案(生成→重建解决方案)。最后重新打开MainWindow.xaml,设计器应该就能识别到样式,自动补全也会正常工作了。给样式加明确的x:Key(可选但推荐)
如果你的MyStyles.xaml里的样式只设置了TargetType(比如是控件的默认样式),设计器的自动补全可能还是不够灵敏。建议给需要手动引用的样式加上x:Key,比如:<Style x:Key="PrimaryButtonStyle" TargetType="Button"> <!-- 你的样式定义 --> </Style>这样在
MainWindow里写Style="{StaticResource PrimaryButtonStyle}"时,设计器就能精准弹出自动补全提示了。
内容的提问来源于stack exchange,提问作者Jannik

