有没有办法通过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}}" />


注意:还有另一对工具可用于生成资源文件的代码:ResXFileCodeGeneratorPublicResXFileCodeGenerator。这些工具生成类而不是模块。

编辑:要使用的名称空间映射如下:

xmlns:myRes="clr-namespace:YourApplicationName.My.Resources"

09-07 03:58