有没有办法通过Xml访问My.Resources?
像这样
<Image Source="{Binding MyImage,
Source={x:Static my:Resources},
Converter={StaticResource MyBitmapToImageSourceConverter}}" />
这是我得到的错误:
\ Application.xaml(122,36):错误MC3029:'my:Resources'成员无效,因为它没有合格的类型名称。
以上当然是行不通的。
注意:转换器仅供参考。
更新:
我考虑了一个想法,如果可行的话,这可能是一个好方法,我为资源创建了一个包装器类:
Public Class Resources
Public Shared ReadOnly m_Resources As New Resources
Public Shared ReadOnly Property Resources() As Resources
Get
Return m_Resources
End Get
End Property
Public ReadOnly Property MyResources(ByVal name As String) As Object
Get
Return My.Resources.ResourceManager.GetObject(name)
End Get
End Property
End Class
然后在绑定中,我尝试像这样访问它:
<Setter Property="ImageSource"
Value="{Binding MyResources[Ok], Source={x:Static src:Resources.Resources}}"/>
但是我仍然收到以下消息:
System.Windows.Data错误:16:无法从“(类型“资源”)获取“ MyResources”值(类型“ Object”)。 BindingExpression:Path = MyResources [Ok]; DataItem ='资源'(HashCode = 59109011);目标元素是“图片”(名称=“ btnOk”); target属性为'Source'(类型为'ImageSource')TargetParameterCountException:'System.Reflection.TargetParameterCountException:参数计数不匹配。
顺便说一句,我在MyResources Getter中放置了一个测试MessageBox,看来根本没有访问该属性。
最佳答案
问题是默认情况下,为Resources.resx文件生成代码的工具是VbMyResourcesResXFileCodeGenerator
(项目项的“自定义工具”属性)。该工具会生成一个模块,其中资源属性是内部的(朋友),因此StaticExtension无法访问它。要解决该问题,您应该将Resources.resx的自定义工具更改为PublicVbMyResourcesResXFileCodeGenerator
,这将生成公共成员。
另外,VB模块大致等效于静态(共享)类,因此没有资源实例可以用作绑定源,因此您不能为绑定指定路径。您应该将绑定源直接设置为所需的属性:
<Image Source="{Binding Source={x:Static my:Resources.MyImage},
Converter={StaticResource MyBitmapToImageSourceConverter}}" />
注意:还有另一对工具可用于生成资源文件的代码:
ResXFileCodeGenerator
和PublicResXFileCodeGenerator
。这些工具生成类而不是模块。编辑:要使用的名称空间映射如下:
xmlns:myRes="clr-namespace:YourApplicationName.My.Resources"