1

ビュー モデルにリソース ディクショナリ XAML ファイルを読み込もうとしています。それをインスタンス化することができ、それを呼び出してもすぐにエラーは発生しませんが、制御が UI に戻った後、「COM コンポーネントへの呼び出しからエラー HRESULT E_FAIL が返されました」というエラー ポップアップが表示されます。

私は次のことをしています:

  • ResourceDictionary ファイルは、Silverlight アプリケーションのルート フォルダーの場所ViewModelsResources.xamlにあります。MyApp/ViewModelsMyApp
  • ViewModelsResources.xamlビルド アクション: Content、出力ディレクトリにコピー: Copy always、カスタム ツール:とマークされています。MSBuild:Compile
  • ResourceDictionary オブジェクトがインスタンス化されます (このコードは、リソース ディクショナリ ファイルと同じフォルダー内のクラスにあります)。
    ResourceDictionary VMResources = new ResourceDictionary()
    {
        Source = new Uri("/ViewModels/ViewModelsResources.xaml", UriKind.Relative)
    };
  • オブジェクトは、x:Key 値に基づくインデックスを介して参照されますTemplate1 = VMResources["myTemplate"] as ControlTemplate;(上記のコード サンプルと同じクラス) 。

デバッグは、 と に適切な値が割り当てられていることを示していVMResourcesますTemplate1。なぜこれが COM コンポーネントに関するエラーをスローするのかはわかりませんが、この ResourceDictionary が参照されるときにそれを分離しました。参照している行を取り出してVMResources[x]もエラーはありません。どんな助けでも大歓迎です。

4

1 に答える 1

1

これは説明どおりに機能することがわかりましたが、リソース ディクショナリで見つかったテンプレートでイベントを指定することはできません。それが問題を引き起こすことに気付くべきだったのですが、COM は私をうんざりさせていました。イベント ハンドラーの必要性を回避するために、私はビヘイビアーを使用しています。ビヘイビアについては、たくさんの読み物があります。私はここここから始めました。

注:実際には提案どおりに機能するため、この質問を削除する必要があると誰かが信じている場合は、そのようにコメントしてください。これを残しておくと、誰かが私と同じことをしようとするのに役立つかもしれません。

于 2012-08-22T18:26:14.417 に答える