ここにあなたが使うことができるトリックがあります。
- Silverlight ビューとビュー モデルが、WPF アプリケーションから簡単に参照できる独自のアセンブリ内に分離されていることを確認してください。
- WPF アプリケーションのビューとビュー モデルを格納する Silverlight クラス ライブラリへの参照を追加します。
UserControl のコンテンツ「CustomerView」を、「customerViewTemplate」というリソース ディクショナリに格納されている DataTemplate に移動します。
Silverlight と WPF のルート UI 要素 XAML ファイル内で、次のようにします。
<ContentControl ContentTemplate="{Staticresource customerViewTemplate}" />
- Silverlight アプリケーションの App.xaml で、次のリソース ディクショナリ参照をマージされたディクショナリに追加してください。
<ResourceDictionary Source="MyApp.Views;component/CustomerViewResources.xaml" />
- WPF アプリケーションの App.xaml で、次のリソース ディクショナリ参照をマージされたディクショナリに追加してください。
<ResourceDictionary Source="pack://application:,,,/MyApp.Views;component/CustomerViewResources.xaml" />
番号付けについて申し訳ありません。スタック オーバーフローの順序付きリスト メカニズムが少しずれているようです。
これが機能する理由は、WPF 内で XAML から Silverlight UserControl を直接参照できないためです。次のエラーが表示されます。
「アセンブリ 'System.Windows、Version=2.0.5.0、Culture=neutral、PublicKeyToken=7cec85d7bea7798e' への依存関係を解決できません。プリロードされていないためです。ReflectionOnly API を使用する場合、依存アセンブリは、ReflectionOnlyAssemblyResolve イベントを通じて事前に読み込まれるか、必要に応じて読み込まれる必要があります。
C# を使用して UserControl を WPF グリッドに強制しようとすると、次の 3 つのエラーが発生します。
'System.Windows.Controls.UIElementCollection.Add(System.Windows.UIElement)' に最適なオーバーロードされたメソッドには、無効な引数が含まれています。
タイプ 'System.Windows.Controls.UserControl' は、参照されていないアセンブリで定義されています。アセンブリ 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' への参照を追加する必要があります
「ToWpfTest.Views.TestView」から「System.Windows.UIElement」に変換できません
これは、WPF の System.Windows.UIElement が Silverlight の System.Windows.UIElement と同じではないためです。