我的App.Resources MergedDictionary存在一个棘手的问题。每次从另一个程序集添加带有源和XML命名空间的新字典时,都会产生错误,我无法构建我的程序。
错误出现在App.xaml中,ResourceDictionary带有下划线,消息为Value Cannot be Null. Parameter Name: item
。这完全没有意义,因为我之前做过完全相同的事情。唯一的区别是,这一次,我引用了另一个程序集的命名空间(c#类库)。这是App.xaml文件:
<Application x:Class="Quiz.Client.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Quiz.Client"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/Styles.xaml" />
<ResourceDictionary Source="Resources/Templates.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
以下是Styles.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Quiz.Client">
<Style x:Key="StrongFont"
TargetType="ContentControl">
<Setter Property="FontSize"
Value="20" />
<Setter Property="FontWeight"
Value="ExtraBold" />
<Setter Property="Foreground"
Value="DarkRed" />
</Style>
</ResourceDictionary>
这是Templates.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Quiz.Client"
xmlns:domain="clr-namespace:Quiz.Core.Domain;assembly=Quiz.Core"
xmlns:common="clr-namespace:Quiz.Client.Common">
<DataTemplate x:Key="ArithmeticQuestionTemplate"
DataType="domain:ArithmeticQuestion">
</DataTemplate>
<common:QuestionTemplateSelector x:Key="QuestionTemplateSelector"
ArithmeticTemplate="{StaticResource ArithmeticQuestionTemplate}" />
</ResourceDictionary>
到底发生了什么事?是否有引入软件破坏的变化或什么?我完全迷失了。
答案 0 :(得分:1)
确认!!!此错误由 Microsoft 跟踪。这意味着 WPF 在某些方面将尝试通过 Microsoft 报告过程自动向 Microsoft 报告。在报告 VS 期间开始冻结。请等待错误报告完成。
该bug在lattes VS 2019中依然存在。
重启后一切正常。确认!!!
<块引用>感谢您的回答。我相信这是由未知原因引起的 Visual Studio 错误。也许我的插件之一,谁知道。解决问题的唯一方法是重新启动 Visual Studio 并构建项目。从另一个程序集中添加新命名空间时,问题似乎开始了。然后,在重新启动 Visual Studio 之前无法构建项目。很奇怪,以前从来没有见过这样的东西。 – 用户3096803
答案 1 :(得分:0)
不确定为什么你的方法不起作用,但这不是我通常自己导入资源的方式。通常我会将ResourceDictionary添加到我的库项目中,将所有库资源放入其中并使用pack语法将其导入到我的主项目中:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MyLibrary;component/LibraryResources.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- main project resources go here -->
</ResourceDictionary>
总的来说,我认为这是一个更好的架构,因为每当其中一个子库资源发生变化时,它不需要重新编译主项目。如果您决定切换到MEF,它也会在以后更容易,因为您的库资源现在封装在一个您可以[Export]
的单个ResourceDictionary对象中。