我创建了一个包含2个WPF程序集的测试解决方案。
在" AssemblyTest"中,我有一个简单的默认窗口," OtherWindow",什么都不做。 在" StartingAssembly中,我还有一个简单的默认窗口," MainWindow"从AssemblyTest初始化和Show()OtherWindow。
所有引用都是正确的,在这种情况下一切正常;两个窗口都按照预期的方式正确显示。
using AssemblyTest;
namespace StartingAssembly
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
OtherWindow window = new OtherWindow();
public MainWindow()
{
InitializeComponent();
window.Show();
}
}
}
然而,当我改变&#34; OtherWindow&#34;使用StaticResource。
这是正常的:
<Window x:Class="AssemblyTest.OtherWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OtherWindow" Height="350" Width="525" Background="Blue">
<Grid>
</Grid>
</Window>
但是,这会导致XamlParseException:
<Window x:Class="AssemblyTest.OtherWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OtherWindow" Height="350" Width="525" Background="{StaticResource mainLoginBackground}">
<Grid>
</Grid>
</Window>
资源位于CommonResourceDictionary.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<RadialGradientBrush x:Key="mainLoginBackground" GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="1" RadiusY="1">
<GradientStopCollection>
<GradientStop Color="#ff0f75ba" Offset="0" />
<GradientStop Color="#ff033657" Offset="1" />
</GradientStopCollection>
</RadialGradientBrush>
</ResourceDictionary>
这是来自AssemblyTest的App.xaml
<Application x:Class="AssemblyTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="OtherWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/CommonResourceDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
最后,这是错误:
我使用尽可能基本的示例编写了这个问题,以便我可以申请更大的项目。如果你能帮助我找出遗漏的东西,我将能够在我正在使用的更大项目上使用这个解决方案。另外,我搜索了StackOverflow类似的问题,但没有接近这个特定的问题。
答案 0 :(得分:1)
由于ResourceDictionary
是在另一个程序集中定义的,因此您应该使用pack URI来引用它:
<ResourceDictionary Source="pack://application:,,,/AssemblyTest;component/Resources/CommonResourceDictionary.xaml" />
您可以在此处详细了解:https://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx