在WPF中将资源字符串与视图绑定时出现错误

14

我正在尝试绑定在Resources.resx中定义的静态字符串“title”。当我运行应用程序时,我得到下面的错误。

经过在此站点上调查该错误,我发现生成的Resources类被标记为internal,而WPF正在尝试从另一个程序集解析资源,因此除非将资源标记为public,否则无法成功。同样,我有一个包含我的视图和资源定义的单个项目。

我不需要任何友元程序集。我相信内部类可以在同一程序集中访问。我在这里看到了一篇类似的帖子,其中一位用户建议使用ResXFileCodeGenerator。您对此有什么看法?

System.Windows.Markup.XamlParseException occurred
HResult=-2146233087
Message='Provide value on 'System.Windows.Markup.StaticExtension' threw an exception.' Line number '11' and line position '9'.
Source=PresentationFramework
LineNumber=11
LinePosition=9
StackTrace:
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at TestApp.MainWindow.InitializeComponent() in ~\TestApp\TestApp\MainWindow.xaml:line 1
   at TestApp.MainWindow..ctor() in ~\TestApp\TestApp\MainWindow.xaml.cs:line 28
InnerException: System.ArgumentException
   HResult=-2147024809
   Message='TestApp.Properties.Resources.Firstname' StaticExtension value cannot be resolved to an enumeration, static field, or static property.
   Source=System.Xaml
   StackTrace:
        at System.Windows.Markup.StaticExtension.ProvideValue(IServiceProvider serviceProvider)
        at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
   InnerException:

抱歉,我没有看到内部的“Exception”……我只看到了非常常见的“System.Windows.Markup.XamlParseException”,忽略了其他的。请展示一下您尝试访问资源字符串的方式。 - Sheridan
2
是的,看起来你需要使用 PublicResXFileCodeGenerator 生成器。你尝试在 Visual Studio 解决方案资源管理器中右键单击资源文件,选择 属性 选项,然后将 自定义工具 属性设置为 PublicResXFileCodeGenerator 吗?你也可以在 Visual Studio 的资源设计器窗口中将 访问修饰符 属性设置为 Public - Sheridan
是为所有属性还是仅为类设置? - Hassan Akhtar
对于Resx文件,请在“解决方案资源管理器”中找到它,打开其属性窗口并更改其中的“自定义工具”设置。 - Sheridan
谢谢,通过将所有属性和类修饰符更改为public,它已经起作用了 :) 干杯 - Hassan Akhtar
显示剩余4条评论
1个回答

42

看起来您需要使用PublicResXFileCodeGenerator生成器。

在Visual Studio解决方案资源管理器中右键单击资源文件,选择属性选项,然后将自定义工具属性设置为PublicResXFileCodeGenerator。您还可以在Visual Studio的资源设计器窗口中设置访问修饰符属性为Public


2
注意:在将修饰符设置为public后,我不得不重新启动Visual Studio。 - Mathias Colpaert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接