我将应用程序的资源保存在一个单独的DLL中,并在App.xaml中使用类似的东西在我的主EXE中引用它们: -
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MyThemesAssembly;component/Themes/Generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)
当我编辑主EXE项目中的窗口时,VS2010设计器无法识别来自其他程序集的任何资源,因此我没有看到任何样式应用(不是真正的问题,因为我总是在XAML视图中工作).但是,Resharper也无法识别这些外部资源名称,因此在编辑XAML时会导致资源名称下出现大量波形.
我发现我可以通过在每个窗口和用户控件中包含上面的XAML来修复VS设计器和Resharper,但是这会对内存和/或性能产生负面影响吗?每个窗口都会获得单独的资源副本吗?
尝试使用VS2012。
我有一个测试项目,我正在使用它从外部程序集进行资源字典合并,在我的 app.xaml 中我有这个:
<Application x:Class="WpfPackDictionaries.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WPFCommonLibrary;component/Vectors/Vectors.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)
然后在我的 mainwindow.xaml 中,我有这样的路径,其中路径拉入样式 ModulatedPathStyle:
<Window xmlns:Control="clr-namespace:WPF.Common.Control;assembly=WPFCommonLibrary" x:Class="WpfPackDictionaries.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Path Style="{StaticResource ModifiablePathStyle}" Fill="Red"/>
<Control:Jabberwocky />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
Intellisense/Resharper(V7.1 10/31(早期访问版本))可以识别该样式,并且我没有波浪线:

那么您尝试过在VS2012中工作吗?