单独库中的资源词典
本文关键字:资源 单独库 | 更新日期: 2023-09-27 18:01:27
我已经在一个单独的库中定义了我的resourceDictionary,如下所示
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cultures="clr-namespace:My_Localization.Cultures"
xmlns:properties="clr-namespace:My_Localization.Properties">
<ObjectDataProvider x:Key="Resources" ObjectType="{x:Type cultures:CultureResources}" MethodName="GetResourceInstance"/>
<ObjectDataProvider x:Key="CultureResourcesDS" ObjectType="{x:Type cultures:CultureResources}"/>
</ResourceDictionary>
我从另一个库中使用了这个库,如下所示(仅限xaml的头文件)
<msRibbon:RibbonTab x:Class="Ribbon.Planner.PlannerRibbon"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:msRibbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="500" Header="{Binding Path=Ribbon_About, Source={StaticResource Resources}}"
>
<Grid>
...
...
...
</Grid>
我已经添加了My_Localization库的引用,我只更改标题。所有的工作都很好,但唯一的问题是,在设计时,我有"Header="{Binding Path=Ribbon_About, Source={StaticResource Resources}}"下划线。当我将鼠标悬停时,提示"资源"资源"无法解析"
为什么有一个错误像提示在我的xaml?那为什么一切都很好呢?
My Solution结构
- MainExe -包含app.xaml。我在这里合并了资源字典。在xaml中没有问题,因为合并字典存在于app.xaml 中
- My_Localization -包含资源字典的库(上面的代码)
- Lib1 -参考My_Localization和有问题的xaml解释
- Lib2 -参考My_Localization和有问题的xaml解释
- Lib3 -参考My_Localization和有问题的xaml解释
您需要在app.xaml
文件中或本地提供对ResourceDictionary
的引用。app.xaml
中的资源对应用程序的所有xaml文件全局可用。
对于库项目中的Xaml文件,设计器的工作方式略有不同。
在运行时,启动项目中的app.xaml
将用于所有程序集。在设计时,它将是本地程序集的app.xaml
。这意味着,您可以将app.xaml
文件添加到库中,仅在从特定库呈现xaml文件时由Visual Studio设计器使用(将文件的构建动作设置为Page)。
引用ResourceDictionary
:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Application.Resources>
<ResourceDictionary>
<!-- Other global resources -->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ASSEMBLYNAME;component/FOLDERPATH/RDNAME.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
其中ASSEMBLYNAME是ResourceDictionary
所在程序集的名称(检查项目属性)。
的例子:
程序集名称为"MyAssembly"的项目,ResourceDictionary
位于文件夹路径"Resources/rd/mld .xaml"
Source="pack://application:,,,/MyAssembly;component/Resources/RDs/MyRd.xaml"
在App.xaml
中,您必须将MergedDictionary
添加到引用其他字典的资源中。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/RibbonControlsLibrary;component/Your/Dictionary/Path.xaml" />
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
您可以在每个示例中包含ResourceDictionary
<msRibbon:RibbonTab x:Class="Ribbon.Planner.PlannerRibbon"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:msRibbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="500" Header="{Binding Path=Ribbon_About, Source={StaticResource Resources}}">
<msRibbon:RibbonTab.Resources>
<ResourceDictionary Source="pack://application:,,,/<ASSEMBLY_NAME>;component/<RESOURCES_FILE>.xaml"/>
</msRibbon:RibbonTab.Resources>
<Grid>
...
...
...
</Grid>