7

Xaml を介して My.Resources にアクセスする方法はありますか?

このような

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

これは私が得るエラーです: \Application.xaml(122,36): error MC3029: 'my:Resources' member is not valid because it has a limited type name.

上記はもちろん機能しません。

注: コンバーターは説明のみを目的としています。


アップデート:

私は 1 つのアイデアについて考えました。それが機能する場合、これは良いアプローチかもしれません。リソースのラッパー クラスを作成しました。

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: '' (タイプ 'Resources') から 'MyResources' 値 (タイプ 'Object') を取得できません。BindingExpression:Path=MyResources[OK]; DataItem='Resources' (HashCode=59109011); ターゲット要素は 'Image' (Name='btnOk'); ターゲット プロパティは 'Source' (タイプ 'ImageSource') です TargetParameterCountException:'System.Reflection.TargetParameterCountException: パラメーター数が一致しません。

ところで、テスト MessageBox を MyResources Getter に配置しましたが、プロパティにはまったくアクセスしていないようです。

4

2 に答える 2

9

問題は、既定では、Resources.resx ファイルのコードを生成するツールがVbMyResourcesResXFileCodeGenerator(プロジェクト アイテムの "カスタム ツール" プロパティ) であることです。このツールは、リソース プロパティが内部 (Friend) であるモジュールを生成するため、StaticExtension はそれにアクセスできません。この問題を解決するには、Resources.resx のカスタム ツールをPublicVbMyResourcesResXFileCodeGenerator、パブリック メンバーを生成する に変更する必要があります。

また、VB モジュールは静的 (共有) クラスとほぼ同等であるため、バインディングのソースとして使用できる Resources のインスタンスがないため、バインディングのパスを指定することはできません。バインディング ソースを必要なプロパティに直接設定する必要があります。

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

注: リソース ファイルのコードを生成するために使用できる別のツールのペアがあります:ResXFileCodeGeneratorPublicResXFileCodeGenerator. これらのツールは、モジュールではなくクラスを生成します。

編集:使用する名前空間のマッピングは次のとおりです。

xmlns:myRes="clr-namespace:YourApplicationName.My.Resources"
于 2009-09-14T13:48:47.737 に答える
3

my.projectリソースタブでmy.resourcesのアクセス修飾子をfreindからpublicに変更します。

于 2011-09-16T11:21:49.433 に答える