8

WinRTのとWP8の間でコードを共有する:XAML clr-namespace - 非互換性を使用していますか?

WP8は望んでいる:

xmlns:vm="clr-namespace:MyApp.ViewModels" 

WinRTのが望んでいる:

xmlns:vm="using:MyApp.ViewModels" 

はこれを使用すると、XAMLコードを共有することができないことを意味する - ユーザーコントロールのように - プロジェクト間でWP7、Silverlight、WPFで可能な方法

誰かが回避策を見つけましたか? XmlnsDefinition属性はこれを修正するかもしれないように見えましたが、MSはそれをWinRTから取り出しました。

+0

XAML共有は各プロジェクトでXAMLファイルの別々のコピーを実際に維持することによってのみ可能でした。したがって、「共有」はちょっとした誤解です。ポータブルクラスライブラリの登場により、実際には多少変更されましたが、すべてのターゲットプラットフォームに存在するタイプとメソッドの使用に限られていました。この場合、共有は「テキストをコピーする」だけなので、これを実行することができます(WinRTの「使用」を調整する必要があることを除いて)。 – dlev

+0

あなたは必要ありませんファイルをコピーするには、リンクされたファイルとして追加するだけで済みます。そのため、1つのファイルを管理するだけです。この変更により、もはや明らかに不可能です。 – Kenneth

+1

実際には、WP7/SL/WPFでは、基本コントロールに固執すれば、XAMLを共有できます。あなたの主なxamlをusercontrolsに入れるのがこのトリックです。ユーザコントロールは、各VSプロジェクトへのリンクとして共有できます。次に、ページやウィンドウ、またはユーザーコントロールを組み込んだ各プロジェクトの内容を定義します。 – jlo

答えて

0

私はWindows Phone 8でちょっとやったことがありますが、エディタはデフォルトでclr-namespaceに変換されますが、それでもusingに変更できます。

1

この問題は、限られた回避策と一緒に、ここでは詳細に説明されています。Windows 8でのWindows Phone 8とXAMLのhttp://msdn.microsoft.com/en-us/library/windowsphone/develop/jj714088(v=vs.105).aspx

  • XAMLはバイナリ互換ではありません。前述のとおり、各プラットフォームでUI を作成するために使用するコントロールは似ています。名前、動作、およびそれらが公開するプログラミングインターフェイス(構文)は似ています。ただし、プラットフォームごとに具体的に実装されているのは です。
  • XAML for Windows Phone 8とXAML for Windows 8では、名前空間のプレフィックスが異なります。これは、基本ページに含まれている名前空間 を最初から作成するときの例です。 [...] これらの名前空間のインポートを比較すると、微妙な内容が表示されますが、 の名前空間のインポート方法に大きな違いがあります。 Windowsでは 電話8では、インポートされた名前空間の先頭にclr-namespace:が付きます。 In Windows 8でインポートされた名前空間の先頭には:が付きます。同じ構文を を使用して名前空間をインポートできない限り、 は同じXAMLを使用するのが難しくなります。
  • XAMLは条件付きコンパイルをサポートしていません。条件付きコンパイルは、特定の プラットフォームをターゲットとするコードパスでコンパイルすることによってプラットフォーム間の相違点を処理するための便利なテクニックであり、別のプラットフォーム用にコンパイルするときには別のコードパスです。 Windowsのclr-namespaceを使用するネームスペースのインポートでコンパイルすると、以前の問題を単に条件付きで でコンパイルできないため、両方のプラットフォーム間でXAMLページを共有するのが難しくなります。

これは のWindows Phone 8とWindows 8明確な指針が設計し、 設計にそれぞれの ガイドラインを受け入れ、プラットフォームごとに個別にあなたのUIを構築することであるとの共有のための完全なバリケードとして見るべきではありません。技術的には、これらの障害を回避することが可能です( )。ページの初期化中に コードからUIを作成することができます。ランタイム でリソースからプラットフォーム固有のXAMLを読み込み、文字列としてページに挿入できます。しかし、 の技術はどれもスケールがなく、あなたのアプリがあなたの見た目にどのように見えるのか、あなたのコアアセットの構築を邪魔します。あなたのコード 共有への投資は、アプリ・ロジック、データモデル、のviewmodels、 など

は[...] UIを共有するための一つの技術はできるを共有しようとすることで、更なるダウン あなたのアプリスタックをはるかに大きなリターンを得られます一部の状況で使用することがあります は、UIの一部をユーザーコントロールに分離し、それらを で共有しようとしています。 [...]しかし、この議論の始まりである で言及された制限のために、技術は基本ユーザー コントロールに制限されています。これらの制限に加えて、ターゲット プラットフォームに合わせてユーザーエクスペリエンスを常に構築するためのガイドラインは と考えてください。 XAMLコントロールの共有は可能ですが、制限されています。 この種の共有の候補は、 のポップアップウィンドウや、 が一般的に複雑なXAML のない基本的なUI要素と単純なスタイリングで構成されるため、共有したい他のウィジェットに表示するUIです。

関連する問題