誰かがこれを処理する方法について良い考えを持っているかどうか疑問に思っていました.
WP7.1 では、優れたWindows Phone Toolkitを利用して、LongListSelector や Panorama などの便利なコントロールを含めることができます。これらはMicrosoft.Phone.Controls.Toolkit
アセンブリの一部です。
Microsoft.Phone.Controls
WP8 では、これら 2 つのコントロールは公式アセンブリの一部であるため、ツールキットは必要ありません。
アプリをマルチターゲットにして、WP71 と WP80 の 2 つの電話プロジェクトを作成し、WP80 のファイルを WP71 のファイルにリンクします。
XAML ページで Panorama または LongListSelector コントロールを使用しようとするまで、これはうまく機能します。WP80 プロジェクトで電話ツールキットの WP80 DLL を参照すると、前述の 2 つのコントロールが含まれていません。驚いたことに、それらは既に存在しているためです。
問題は、WP71 では XAML の先頭に名前空間宣言が必要であり、両方のプロジェクトで名前空間が異なることです。
WP71 :
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
<toolkit:Panorama />
WP80 :
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
<phone:Panorama />
各プロジェクトは、別のアセンブリを指す必要があるため、名前空間を使用するだけでは名前空間が正しくないと考えているため、プロジェクトをビルドできません。
XAML でコンパイル定数を使用できないと思います。それ以外の場合は修正されます。
私の回避策はもともと、WP80 プロジェクトで古い WP71 DLL を参照することでした。しかし、他のサードパーティ ライブラリは、公式の 8.0 SDK DLL (私の場合は Caliburn) に対してバインドするため、問題が発生します。
どうすればこのピクルスを解決できますか? 私の頭の上の唯一のアイデアは、分離コードに頼ってコントロールのインスタンスを作成することでした:(もっと良い方法はありますか?