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

问题描述:
在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图片资源
在这里插入图片描述
这时候你需要去你的A项目中查看引用的图片资源的文件属性,需要将生成操作改成Resource
如下所示:
在这里插入图片描述
然后再运行B项目就能运行成功了,也能正常的看到你的引用的自定义控件(页面或者窗体)的图片了。

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF ,如果您想要在外部项目使用另一个项目定义的自定义控件并且使用其的静态资源,您需要确保在另一个项目正确定义了这些静态资源。如果您已经正确定义了这些静态资源,但在外部项目仍无法使用它们,您可以尝试将它们在应用程序的 App.xaml 文件进行全局定义。 例如,如果您定义了名为 MyCustomControl自定义控件,并希望使用其的静态资源,可以在定义这些静态资源项目的 App.xaml 文件添加以下代码: ```xml <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/MyCustomControlLibrary;component/Themes/Generic.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> ``` 其,`MyCustomControlLibrary` 是定义 MyCustomControl项目名称,`Themes/Generic.xaml` 是包含静态资源的 XAML 文件路径。 然后,在外部项目使用 MyCustomControl 时,可以直接使用其定义的静态资源,例如: ```xml <Window x:Class="MyExternalProject.MainWindow" xmlns:custom="clr-namespace:MyCustomControlLibrary;assembly=MyCustomControlLibrary" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel> <custom:MyCustomControl/> </StackPanel> </Window> ``` 其,`MyCustomControlLibrary` 是自定义控件项目的命名空间,`MyCustomControl` 是自定义控件的名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值