在我的WPF应用程序中,我包含来自另一个项目的ResourceDictionary。
<Application x:Class="namespace.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- This Line causes an Error -->
<ResourceDictionary Source="pack://application:,,,/Commons;Component/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
元数据覆盖和基本元数据必须属于同一类型或派生类型。
解决方案构建成功并运行。
重新启动Visual Studio无法修复它。
剪切并粘贴<ResourceDictionary Source="..." />
行导致另一个错误,如评论中所解释的here:
Value Cannot be Null. Parameter Name: item
。然后重新启动Visual Studio将返回旧错误。
可悲的是,我还没有发现如何重现这个错误,我只能告诉你更多有关环境的信息:
尽管我怀疑,这些与我的问题有关,这里是我安装的插件:
答案 0 :(得分:0)
Sinatr 的评论暗示我要阅读更多关于主题的内容。
ThemeInfo
在自定义控件库中,theres会在ThemeInfoAttribute
AssemblyInfo.cs
[assembly:ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
正如在自动生成的注释中所述,第一个参数用于确定是否存在或在何处查找主题特定的资源词典。
第二个参数定义了存在或找到通用ResourceDictionary
(Generic.xaml
)的位置。
ResourceDictionaryLocation
- 枚举 ResourceDictionaryLocation
- 枚举本身用于指定这些词典的位置。
ResourceDictionaryLocation.None
不存在主题词典。
ResourceDictionaryLocation.SourceAssembly
主题词典存在于程序集中,用于定义主题类型。 此期望
ResourceDictionary
位于/Themes
- 文件夹中。稍后解释。
ResourceDictionaryLocation.ExternalAssembly
主题词典存在于定义主题类型的组件外部的程序集中。
我不打算解释这是如何运作的。
/Themes
- 文件夹可悲的是,我找不到太多关于此的内容。如果有人有更多信息,请分享。
你有没有想过,无形控制的风格是如何应用的?
如果有人创建了一个无形控件,他按如下方式执行:
public class MyControl : ControlTemplate
{
static MyControl()
{
// This tells WPF to search for a Style for this type
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl)),
new FrameworkPropertyMetadata(typeof(MyControl)));
}
}
简而言之,WPF中的Ressources位于,通过搜索 Logical-Tree
,然后在Application
的资源中,最后在内部。他们打电话给 System-Area
(这是我的德语翻译,如果你知道更好的话请告诉他们。)
因此,ThemeInfo
取决于MyControl
,ResourceDictionary
可能在/Themes
- 文件夹中的/Themes/Generic.xaml
内设置了样式。 System-Area
。 告诉WPF将Ressources添加到 /Themes/Generic.xaml
,最终会自动解析相应的样式。
<Style TargetType="{x:Type MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MyControl}">
..
</ControlTemplate/>
</Setter.Value>
</Setter>
</Style>
内的某处:
ThemeInfoAttribute
这就是上述
Generic.xaml
要求/Themes
位于System-Area
- 文件夹中的原因。 - 不知何故,即使在我的情况下, {{1}} -Functionality甚至不用于此通用文件,这也会导致这些错误。但我无法找出原因。
来源: