3

Silverlight アプリケーション用の WPF フロント エンドの作成を検討しています。通常、Silverlight は機能のサブセットが小さいため、これが可能であるはずですが、問題にアプローチする最善の方法がわかりません。最初から、私は現在アプリをブラウザーから実行していますが、追加したいシステム全体のキープレスをキャプチャする機能や、いくつかの W7 統合などの機能が欠けています。

以前、Silverlight と WPF の間でプロジェクトを作成してソースを共有し、「リンクとして追加」を使用して 2 つのソース ファイルをリンクしました。今回は、おそらく .NET RIA サービスを使用して、プラットフォーム間でソースとビジネス ロジックを共有します。

私が見る問題は、プロジェクト間で Xaml を共有することです。名前空間を除けば、コピー アンド ペーストとほぼ互換性がありますが、これはリソースを共有するための優れた方法ではありません。Silverlight と WPF の間で Xaml を共有する良い方法を思いついた人はいますか?

私の頭をよぎった最後のオプションは、WPF アプリケーションで Browser コントロールを使用して Silverlight アプリをホストすることでした。次に、その周りに Windows 固有の機能を追加できます。私には、これが開発とテストの観点から最もクリーンな方法のように思えます。みんなどう思う?

4

3 に答える 3

4

ここにあなたが使うことができるトリックがあります。

  1. Silverlight ビューとビュー モデルが、WPF アプリケーションから簡単に参照できる独自のアセンブリ内に分離されていることを確認してください。
  2. WPF アプリケーションのビューとビュー モデルを格納する Silverlight クラス ライブラリへの参照を追加します。
  3. UserControl のコンテンツ「CustomerView」を、「customerViewTemplate」というリソース ディクショナリに格納されている DataTemplate に移動します。

  4. Silverlight と WPF のルート UI 要素 XAML ファイル内で、次のようにします。

<ContentControl ContentTemplate="{Staticresource customerViewTemplate}" />

  1. Silverlight アプリケーションの App.xaml で、次のリソース ディクショナリ参照をマージされたディクショナリに追加してください。

<ResourceDictionary Source="MyApp.Views;component/CustomerViewResources.xaml" />

  1. 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 と同じではないためです。

于 2009-05-18T16:27:07.103 に答える
1

XBAP アプリケーションは、私の経験では、タブとキーを押す問題に問題はありません。シルバーライト アプリケーションにそれらを追加する方法を見つけようとしている場合、解決策が見つかった場合はそれを使い続けます。

どのような具体的な W7 統合を検討していますか?

リンクの概念も追加して、管理を容易にするための正しい方法を使用します。

私が見る問題は、プロジェクト間で Xaml を共有することです。名前空間を除けば、コピー アンド ペーストとほぼ互換性がありますが、これはリソースを共有するための優れた方法ではありません。Silverlight と WPF の間で Xaml を共有する良い方法を思いついた人はいますか?

私はXBAPとWPFを持っています.2つのプロジェクトがあり、これらのプロジェクトには両方のローダーコードがあります.

あなたが言及したようにローダーを作成できますが、害はありません...

要件がセキュリティ上の懸念などと一致していれば、最初から XBAP を選択できたはずです...

または試してみてください

  1. パターンとプラクティス: 複合 WPF と Silverlight
  2. プリズム
于 2009-05-18T14:03:19.123 に答える
-1

XAMLの共有に関する問題は、SilverlightとWPFがアニメーションと状態の変更を処理するために非常に異なるモデルを使用することです。アニメーション専用のXAMLの量は、ほとんどのプロジェクトでかなり重要になると思います。そのため、XAMLを共有することは非常に実行可能なオプションではないと思います。

于 2009-05-14T16:36:03.373 に答える