欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPF中跨项目调用自定义控件导致资源丢失的问题

程序员文章站 2022-06-07 13:36:21
...

问题描述:
在B项目中 调用A项目中已有的UserControl,然后这个控件又有自定义的控件,比如自定义的图标类型的Button,但是会出现在运行项目B的时候,切换到调用A项目的UserControl页面中,自定义的这个图标类型的Button消失了,但是在A项目中运行确实正常的。

原因: 图片的路径问题。

解决办法:

在B项目中的App.xaml中引用A项目的资源文件,注意路径的写法是程序集+文件路径的写法方式

	<ResourceDictionary Source="pack://application:,,,/程序集名称;component/文件路径"/>
	
	例:
	<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/ConsoleApp;component/UI/ButtonIcon.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

然后,在你的A项目中定义的UserControl内引用的图片路径的写法和引用资源文件的写法是一样的:
就是程序集+图片路径的写法方式

Icon="pack://application:,,,/程序集;component/图片路径"  //这是我自定义Button控件的图标属性

例:
<ui:ButtonIcon Grid.Column="1" Margin="2" x:Name="btnTest"
                         Icon="pack://application:,,,/ConsoleApp;component/ImageSource/AddIcon.png" 
                                 ButtonType="Icon"
                                 BorderThickness="0">

如果做了以上操作,在运行B项目的时候还会提示以下错误
System.Windows.Markup.XamlParseException:““在“System.Windows.Baml2006.TypeConverterMarkupExtension”上提供值时引发了异常。找不到XXX图片资源
WPF中跨项目调用自定义控件导致资源丢失的问题
这时候你需要去你的A项目中查看引用的图片资源的文件属性,需要将生成操作改成Resource
如下所示:
WPF中跨项目调用自定义控件导致资源丢失的问题
然后再运行B项目就能运行成功了,也能正常的看到你的引用的自定义控件(页面或者窗体)的图片了。

参考:https://zhidao.baidu.com/question/372282194.html