这里没有太多的代码问题,但有一些结构和理解问题。我试图实现的是在不同的项目之间共享样式资源。
我在同一个Visual Studio解决方案中有两个具有相同结构的.Net MAUI项目我在同一个解决方案中还有第三个项目MyResources,它包括两个项目之间的共享资源。
目前,我的两个项目的两个样式和颜色页面是相同的,我想做的是将它们移动到MyResources项目,这样我就可以有一个单一的样式页面TP编辑。这是可能的,如果是这样,我如何才能实现这一点?
| Project[1/2]
| | ...
| | Resources
| | | Styles
| | | | Colors.xaml
| | | | Styles.xaml
| | ...
| ...
| MyResources
| | Resources
| | | AppIcon
| | | Fonts
| | | Images
| | | ...
字符串
我可以通过在Project[1/2].csproj
文件中使用以下代码访问这些资源:
<ItemGroup>
<!-- App Icon -->
<MauiIcon Include="..\MyResources\Resources\AppIcon\appicon.svg" Color="#121725" />
<!-- Splash Screen -->
<MauiSplashScreen Include="..\MyResources\Resources\Splash\splash.svg" Color="#121725" BaseSize="128,128" />
<!-- Images -->
<MauiImage Include="..\MyResources\Resources\Images\*" />
<!-- Custom Fonts -->
<MauiFont Include="..\MyResources\Resources\Fonts\*" />
<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
<MauiAsset Include="..\MyResources\Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
型
我的尝试:在几个不成功的想法之后,在我的项目的App.xaml文件中,我尝试改变:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/Styles/Colors.xaml" />
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
型
进入:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../MyResources/Resources/Styles/Colors.xaml" />
<ResourceDictionary Source="../MyResources/Resources/Styles/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
型
编辑:我已经添加了一个minimal reproductible example的情况下,基于基本的毛伊岛项目,我试图使用样式的按钮从MyResource项目,而不是应用程序项目本身。
1条答案
按热度按时间mctunoxg1#
好吧,我找到解决办法了!
我需要做一些修改,我通过查看这部分文档走上了正确的道路。
第一个问题是共享的ResourceDictionary需要有一些后台代码,以便主项目能够在外部程序集中找到它(* 右键点击MyResources项目> Add > New element > .NET MAUI ResourceDictionary(XAML),这样就自带了一个后台.cs文件,我们可以从以前的默认字典中复制内容)。然后字典带有一个定义的
x:Class
,可以在其他项目中引用。然后,我们需要确保MyResource在我的项目中被引用( 右键单击Project 1/2 > Add > Project reference*),并通过将
xmlns:res="clr-namespace:MyResources.Resources.Styles;assembly=MyResources"
添加到App.xaml根目录中,引用我的项目的App.cs文件中的程序集。最后,我们不必尝试正确获取源代码并使用这些可疑的
pack
URI,只需使用MergedDictionary:<res:MyDictionnary/>
中的命名空间**导入它。我的最终App.xaml代码:
字符串
问题中的Github repo将更新以反映修复。