WPF自定义控件库和普通类库之间的区别?

WPF自定义控件库和普通类库之间的区别?,wpf,prism,Wpf,Prism,几个月前,我发布了一个关于的问题。事实证明,您可以使用组件资源键标记扩展来实现这一点。当时,我只能使用WPF自定义控件项目,而不能使用普通类库项目 现在,我需要使用一个现有的普通类库项目来托管一个共享资源字典。这意味着我需要改进类库项目以支持组件资源键标记扩展。我已经向类库项目添加了一个主题文件夹和一个Generic.xaml资源字典文档,以及对PresentationCore、PresentationFramework和WindowsBase的引用。不幸的是,这似乎不起作用 所以,这里是我的问

几个月前,我发布了一个关于的问题。事实证明,您可以使用组件资源键标记扩展来实现这一点。当时,我只能使用WPF自定义控件项目,而不能使用普通类库项目

现在,我需要使用一个现有的普通类库项目来托管一个共享资源字典。这意味着我需要改进类库项目以支持组件资源键标记扩展。我已经向类库项目添加了一个主题文件夹和一个Generic.xaml资源字典文档,以及对PresentationCore、PresentationFramework和WindowsBase的引用。不幸的是,这似乎不起作用


所以,这里是我的问题:除了上面提到的,WPF自定义控件库项目有什么是普通类库项目没有的?或者,换一种说法,我还可以向类库项目中添加什么来让这个功能正常工作?谢谢。

除了额外的WPF引用之外,WPF自定义控件库模板在AssemblyInfo中还有一个额外的属性

[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)
)]

指定为程序集中的类型存储主题词典的位置

Cameron MacFarland的回答恰到好处。我现在已经对它进行了测试,它是有效的

解决方案如下:将DLL引用和Themes/generic.xaml文件添加到普通类库项目中。然后,打开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)
)]

重新编译,组件资源键标记扩展应该可以工作。

另一个区别是.csproj文件:

类库中缺少标记:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

将其添加到第一个PropertyGroup后,项目的add菜单现在显示典型的WPF文件。

组件资源键标记扩展不起作用。我设置了两个相同的解决方案,一个使用自定义控件库,另一个使用带有DLL refs和Themes/Generic.xaml的普通类库。组件资源键标记扩展在自定义控件库中工作,但在类库中不工作。我已经解决了这个问题,用自定义控件库替换了旧的类库,并将所有类从类库移动到自定义控件库。但我仍然想弄清楚如何改造类库,因为我可能会再次遇到这个问题。以下步骤对我很有用:创建类库项目,添加WPF DLL引用,添加一个Themes/Generic.xaml(没有资源字典选项创建为UserControl,并将xaml编辑为ResourceDictionary),在类中创建一个CRK(基于链接的问题),在Generic.xaml中添加一个资源,并将x:Key设置为该CRK。编译对我来说很好(VS2008 SP1)。我不需要卡梅隆提到的主题信息。可能值得发布您的XAML文件吗?请注意,我还没有测试过这个解决方案,但它确实有意义。我认为diable Themes/generic.xaml支持缺少该属性。我找到了一个更简单的跨程序集资源共享解决方案,使用包URI而不是ComponentResourceKey。此处记录了该方法: