WPF XAML中的My.Resources?

时间:2009-09-14 06:52:34

标签: wpf vb.net xaml my.resources

有没有办法通过Xaml访问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'值(类型'对象')。 BindingExpression:路径=为MyResources [确定]; DataItem ='Resources'(HashCode = 59109011); target元素是'Image'(Name ='btnOk'); target属性为'Source'(类型'ImageSource')TargetParameterCountException:'System.Reflection.TargetParameterCountException:参数计数不匹配。

BTW,我在MyResources Getter中放置了一个测试MessageBox,似乎根本没有访问该属性。

2 个答案:

答案 0 :(得分:9)

问题在于,默认情况下,为Resources.resx文件生成代码的工具是VbMyResourcesResXFileCodeGenerator(项目项的“自定义工具”属性)。此工具生成一个模块,其中资源属性是内部的(朋友),因此StaticExtension无法访问它。要解决该问题,您应该将Resources.resx的自定义工具更改为PublicVbMyResourcesResXFileCodeGenerator,这将生成公共成员。

此外,VB模块大致相当于静态(Shared)类,因此没有可用作绑定源的Resources实例,因此您无法为绑定指定Path。您应该将绑定源直接设置为所需的属性:

<Image Source="{Binding Source={x:Static my:Resources.MyImage},
    Converter={StaticResource MyBitmapToImageSourceConverter}}" />

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

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

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

答案 1 :(得分:3)

在my.project资源选项卡中将my.resources的访问修饰符从freind更改为public。