6

WPFとSilverlightの両方で使用されるコードを書いています。C#では"#if SILVERLIGHT"、条件付きコンパイルに使用でき、機能します。

ただし、XAMLでは、一部の属性に互換性がないため、まったく異なるXAMLファイルを使用する必要があります。XAMLファイルは99%似ており、同期を維持するのは面倒です。

それらをT4テンプレートに変換したいので、次のようなことができます。

<SomeControl <#=ClipsToBounds()#> />

WhereClipsToBounds()は、WPFとSilverlightで異なるテキストを生成します。要件は次のとおりです。

  • XAMLでの作業中のIntellisense
  • ビルド時に生成されたテンプレート
  • プロジェクトは自己完結型であり、VisualStudioのストックバージョンで動作する必要があります。さまざまなSDKやサードパーティのエディターのインストールは許可されていません。
  • テンプレート実行の結果は、ソース管理に含まれるべきではありません。-

custom toolからXAMLファイルを変更できMSBuild:Compile to TextTemplatingFileGenerator、Intellisenseを失うことはありません。ただし、結果のテンプレートは設計時に生成されます。その後、ビルド時に生成することは大きな苦痛のように思えます。

誰かがこの種のセットアップで成功した経験をしましたか?

4

2 に答える 2

0

希望どおりのテンプレート ベースのソリューションを提案した人は誰もいなかったので、SL/WPF の両方を対象とするプロジェクトで作業した経験を共有します。多くの人は、2 つの完全に別個の XAML ファイルを使用し、プラットフォームごとに異なるビューを使用することを提案します。多くの点で、これは "純粋主義" です。ただし、重複を排除し、2 つのターゲットがバラバラになるリスクを減らしたい場合は、XAML ファイルを (単純なプロジェクト リンクを使用して) 共有することをお勧めします。

一般的な非互換性がいくつかあります。

  • コントロールは、異なる名前空間の両方のプラットフォームに存在します - 独自のバージョンをサブクラス化し、それを参照してください。
  • スタイルなどはプラットフォーム間で異なる必要があります - リソースの共通辞書を含め、プラットフォームごとに異なり、キーによる参照を含めます。
  • コントロールが大幅に異なるか、1 つのプラットフォームにしか存在しない場合 - 独自のラッパー コントロールを導入します (「見つからない」場合には、実質的な実装が必要になる場合があります)。
  • 基本的なプロパティまたは機能の欠落 - 多くの場合、添付された動作で何かをハックできます (たとえば、ClipsToBounds の例はここにあります)。
于 2013-02-06T13:48:31.300 に答える
0

PCL に配置できるのは、プラットフォーム全体で一般的な動作を持つ一般的なユーザー コントロールのみですが、プラットフォームごとに個別の xaml ビューを保持することをお勧めします。

于 2013-02-06T11:22:33.073 に答える