使用Uri为不同的程序集加载图像

时间:2017-01-22 21:13:11

标签: c# wpf xaml uri

搜索一段时间,但似乎无法弄清楚为什么我无法在同一解决方案中加载来自不同项目的图像。

我将徽标图像放在一个单独的项目(程序集)中,如下所示:

namespace LogosModule
{
    public static class TestClass
    {
        public static readonly Uri Hess = new Uri("pack://application:,,,/LogosModule;component/Resources1/Logos/Hess.jpg", UriKind.RelativeOrAbsolute);
    }
}

文件构建操作设置为“内容”。我还尝试在复制到根目录时使用“嵌入式资源”。

Uri在构造函数中分配。我也试图硬编码Uri无济于事。

在我的主Shell模块中,我有一个用于显示此图像的AboutView控件(在此处使用Catel):

[ViewModelToModel(nameof(AboutInfo))]
public Uri AssociatedCompanyLogoUri
    {
        get { return GetValue<Uri>(AssociatedCompanyLogoUriProperty); }
        set { SetValue(AssociatedCompanyLogoUriProperty, value); }
    }
    public static readonly PropertyData AssociatedCompanyLogoUriProperty = RegisterProperty(nameof(AssociatedCompanyLogoUri),typeof(Uri));

我有另一张图片,但是这张图片包含在主Shell程序集中,使用相同的方法显示没问题。

XAML代码如下所示:

<StackPanel Grid.Row="0" Grid.Column="0" Margin="10,5,0,10" Orientation="Horizontal">
        <TextBlock Text="Account" FontSize="32" Margin="10,5,0,10"></TextBlock>
        <Image  Source="{Binding AssociatedCompanyLogoUri}" HorizontalAlignment="Right"  
               Margin="10" VerticalAlignment="Center" Stretch="None"  />
 </StackPanel>

我得到的例外情况如下所示:

Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure "LogosModule.g.resources" was correctly embedded or linked into assembly "LogosModule" at compile time, or that all the satellite assemblies required are loadable and fully signed.

 at System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)

在调试时,我可以清楚地看到Uri被分配了。问题似乎是装配不能正确加载。

帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

图像的构建操作应在LogosModule项目中设置为资源

然后应该提供程序集的名称是“LogosModule”,并且在“LogosModule”项目的Resources1 / Logos文件夹中实际上有一个名为“Hess.jpg”的图像,并且您已设置了AssociatedCompanyLogoUri源这样的财产:

AssociatedCompanyLogoUri = LogosModule.TestClass.Hess;