3

誰かがこれを処理する方法について良い考えを持っているかどうか疑問に思っていました.

WP7.1 では、優れたWindows Phone Toolkitを利用して、LongListSelector や Panorama などの便利なコントロールを含めることができます。これらはMicrosoft.Phone.Controls.Toolkitアセンブリの一部です。

Microsoft.Phone.ControlsWP8 では、これら 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) に対してバインドするため、問題が発生します。

どうすればこのピクルスを解決できますか? 私の頭の上の唯一のアイデアは、分離コードに頼ってコントロールのインスタンスを作成することでした:(もっと良い方法はありますか?

4

2 に答える 2

3

リンクを使用せず、それぞれに個別のビューを作成してください。

別の解決策PanoramaExとして、相対プロジェクトのそれぞれにコントロールを作成し、から継承することがありPanoramaます。その後、ビューはPanoramaExコントロールを参照し、単一のビューへのリンクを引き続き使用できます。これは、両方の UI プロジェクトが同じ名前空間を持っている場合です。

編集: 名前空間の WP7 のパノラマではありません:

 xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"

私は ProgressBar と PerformanceProgressBar の最初のソリューションを使用します。ProgressBarEx各 UI プロジェクトには、WP7 が継承しProgressBar、WP8 が継承しPerformanceProgressBar、次に参照するビューがありますProgressBarEx

于 2013-04-07T00:59:10.323 に答える