从另一个程序集加载时,StaticResource会导致XamlParseException

时间:2017-04-18 14:31:36

标签: c# wpf

我创建了一个包含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类似的问题,但没有接近这个特定的问题。

1 个答案:

答案 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