无法从另一个程序集实例化 UserControl - 找不到资源
Cannot instantiate UserControl from another assembly - Resource cannot be found
我有一个包含两个 WPF 项目的解决方案:Primary 和 Secondary。
在 Primary 项目中,一个名为 PrimaryView 的 Window 实例化了一个名为 SecondaryControl 的 UserControl,该控件在 Secondary 项目中定义。
SecondaryControl 使用在 SecondaryResourceDictionary 中定义的 SecondaryStyle(您可能已经猜到了,在 SecondaryProject 中定义)。
事实是:当我尝试 运行 解决方案时,我得到一个 XamlParseError
,并挖掘 InnerExceptions 我最终找到了罪魁祸首,ResourceNotFound
错误。
所以我的问题是:
If SecondaryControl and its SecondaryStyle are defined in the same assembly, why can't I instantiate it it PrimaryAssembly?
Should I make SecondaryStyle available to PrimaryProject namespace somehow? Why?
我试图通过解释它在我的项目中的工作方式来帮助你。
一个单独的程序集包含一个公共控件和公共资源字典,如下所示:
CommonResources.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- Some resources -->
</ResourceDictionary>
SomeCommonControl.xaml
<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>
我可以像这样使用来自其他程序集和 WPF 项目的控件和资源:
<Window x:Class="YourWPFProject.SomeWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:common="clr-namespace:YourAssembly">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/CommonResources.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<common:SomeCommonControl />
</Window>
希望对您有所帮助。
我有一个包含两个 WPF 项目的解决方案:Primary 和 Secondary。
在 Primary 项目中,一个名为 PrimaryView 的 Window 实例化了一个名为 SecondaryControl 的 UserControl,该控件在 Secondary 项目中定义。
SecondaryControl 使用在 SecondaryResourceDictionary 中定义的 SecondaryStyle(您可能已经猜到了,在 SecondaryProject 中定义)。
事实是:当我尝试 运行 解决方案时,我得到一个 XamlParseError
,并挖掘 InnerExceptions 我最终找到了罪魁祸首,ResourceNotFound
错误。
所以我的问题是:
If SecondaryControl and its SecondaryStyle are defined in the same assembly, why can't I instantiate it it PrimaryAssembly?
Should I make SecondaryStyle available to PrimaryProject namespace somehow? Why?
我试图通过解释它在我的项目中的工作方式来帮助你。 一个单独的程序集包含一个公共控件和公共资源字典,如下所示:
CommonResources.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- Some resources -->
</ResourceDictionary>
SomeCommonControl.xaml
<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>
我可以像这样使用来自其他程序集和 WPF 项目的控件和资源:
<Window x:Class="YourWPFProject.SomeWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:common="clr-namespace:YourAssembly">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/CommonResources.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<common:SomeCommonControl />
</Window>
希望对您有所帮助。