VB WPF xaml 文件引用 My.Resources



我在使工作 C# WPF 项目的 VB 版本的 xaml 部分正常工作时遇到问题。

在 VB 项目 xaml 文件的顶部:

xmlns:resources="clr-namespace:My.Resources"

xaml 文件的第一条错误消息是:

"Undefined CLR namespace. The 'clr-namespace' URI refers to a namespace 'My.Resources' that could not be found."

对 xaml 文件中"资源"的典型引用:

<TextBlock FontSize="32" Text="{x:Static resources:Resources.Foo_ProjectName}" Style="{StaticResource HeaderTextBlock}" />

VB 项目没有"根命名空间"。如果我添加一个根命名空间"Foo"并将上述指令更改为 以下,它没有区别 - 关于未定义的 CLR 命名空间的相同消息:

xmlns:resources="clr-namespace:Foo.My.Resources"

Resources.Designer.vb文件概述(自动生成,所以我无法控制它(:

Namespace My.Resources
...
Public Module Resources
...
Public ReadOnly Property Foo_ProjectName() As String
Get
Return ResourceManager.GetString("Foo_ProjectName", resourceCulture)
End Get
End Property
...
End Module
End Namespace

此项目的工作 C# 版本:

XAML 文件:

xmlns:resources="clr-namespace:Foo.Properties"

来自 Resources.Designer.cs 文件的部分代码

namespace Foo.Properties {
public class Resources {
...
public static string Foo_ProjectName {
get {
return ResourceManager.GetString("Foo_ProjectName", resourceCulture);
}
}
...
}
}

我认为My.Resources中的资源与基于某些测试的 WPF xaml 的引用不兼容。 似乎问题在于用于它的代码生成器将对资源的强类型引用放入Module(相当于 C# 中的static class(而不是Class(相当于 C# 中的class(,并且 xaml 编译器仅支持后者。 这似乎是对My.Resources使用特殊的"VbMyResourcesResXFileCodeGenerator"与任何其他.resx文件的"ResXFileCodeGenerator"相比的功能。 我怀疑这是 C# 项目中默认资源与 VB 项目中My.Resources的行为差异。

解决此问题的方法是不要将My.Resources用于此目的。 请改用项目中的自定义 .resx 文件。 然后,您将能够按预期引用 xaml 中的资源。

最新更新