无法从另一个程序集实例化UserControl - 无法找到资源

时间:2015-10-05 13:40:44

标签: wpf resourcedictionary xamlparseexception

我有两个WPF项目的解决方案:主要和次要。

在Primary项目中,名为PrimaryView的Window实例化一个名为SecondaryControl的UserControl,在Secondary项目中定义。

SecondaryControl使用SecondaryStyle,它在SecondaryResourceDictionary中定义(正如您可能已经猜到的那样,在SecondaryProject中定义)。

事实是:当我尝试运行解决方案时,我得到一个XamlParseError,并挖掘InnerExceptions我最终找到了罪魁祸首ResourceNotFound错误。

所以我的问题是:

  
      
  • 如果在同一个程序集中定义了SecondaryControl及其SecondaryStyle,为什么我不能将它实例化为PrimaryAssembly?

  •   
  • 我应该以某种方式使SecondaryStyle可用于PrimaryProject命名空间吗?为什么呢?

  •   

1 个答案:

答案 0 :(得分:1)

我试着通过解释它在我的项目中如何运作来帮助你。 一个单独的程序集包含一个公共控件和公共资源字典,如下所示:

<强> CommonResources.xaml

aid

<强> SomeCommonControl.xaml

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <!--  Some resources  --> 

</ResourceDictionary>

我可以使用其他程序集和WPF项目中的此控件和资源,如下所示:

<UserControl x:Class="YourAssembly.SomeCommonControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/CommonResources.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>

    <!-- Some specific content -->

</UserControl>

我希望这会对你有所帮助。