在我的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将带回旧错误。可悲的是,我还没有找到如何重现此错误的方法,我只能告诉您有关环境的更多信息:
尽管我对此表示怀疑,但这些都是与我的问题有关的,这里是我安装的插件:
最佳答案
Sinatr 的评论提示我阅读有关主题的更多信息。ThemeInfo
在自定义控件库内部,在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
-Enumeration本身用于指定这些词典的位置。ResourceDictionaryLocation.None
ResourceDictionaryLocation.SourceAssembly
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)));
}
}
简而言之,通过搜索Logical-Tree
,然后在Application
的Resources中,最后在sth中,可以找到WPF中的资源。他们叫System-Area
(如果您知道更好的话,这是我的德语翻译)。因此,取决于
ThemeInfo
,MyControl
可能在ResourceDictionary
-Folder内部的/Themes
中具有其样式。 /Themes/Generic.xaml
。还有,即告诉WPF将资源添加到System-Area
中,最终导致自动解析适当的样式。在
/Themes/Generic.xaml
内的某处:<Style TargetType="{x:Type MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MyControl}">
..
</ControlTemplate/>
</Setter.Value>
</Setter>
</Style>
资料来源: