如何在代码中访问.resw资源文件的子属性(如Greeting.Text)?
访问.resw中带属性后缀的资源项
在UWP的.resw资源文件中,像Greeting.Text这类带后缀的项,是专门用于通过x:Uid自动绑定控件属性的,直接用ResourceLoader.GetString()访问会触发异常。要在代码中直接访问这类资源,不需要复制资源,可以通过ResourceMap来实现:
实现代码
#include <winrt/Windows.ApplicationModel.Resources.Core.h> using namespace winrt::Windows::ApplicationModel::Resources::Core; // 获取资源上下文与资源映射 auto resourceContext = ResourceContext::GetForCurrentView(); auto resourceMap = ResourceManager::Current().MainResourceMap().GetSubtree(L"Resources"); // 访问Greeting.Text对应的资源 auto resourceCandidate = resourceMap.Lookup(L"Greeting/Text", resourceContext); if (resourceCandidate.Value() != nullptr) { const auto myString = resourceCandidate.Value().AsString(); // 在这里使用获取到的字符串 }
原理说明
- 资源系统内部会将
Greeting.Text解析为Greeting节点下的Text子项,因此需要用斜杠/替代点.来拼接访问路径。 - 通过
ResourceManager获取主资源映射,定位到对应.resw文件的Resources子树后,用Lookup方法传入正确路径和上下文,即可安全获取资源值。
内容的提问来源于stack exchange,提问作者citelao
相关产品推荐
相关产品推荐

