編集:混乱を避けるために: これは、以前はMicrosoft Surface 1.0と呼ばれていた、または現在も呼ばれているテーブルに関するものです。Microsoft Surface 2.0と呼ばれていたテーブルのことでも、現在Microsoft Surfaceと呼ばれているタブレット コンピューターのことでもありません。編集終了
デスクトップ システムと MS Surface/PixelSense 1.0 の両方で実行する WPF アプリケーションを作成しています。これが通常どのように行われるかについての規則を探しています。
プラットフォーム間にいくつかの違いがあることは承知しています。そのため、基本的な GUI スケルトンがデスクトップと PixelSense バージョンで異なります (この場合、Canvas
デスクトップ バージョンの a とScatterView
ルート GUI 要素としての PixelSense バージョンの a)。
ただし、デスクトップ バージョンには、PixelSense バージョンでもほぼ同じように表示される WPF ベースのユーザー コントロール/GUI フラグメントが多数あります。
残念ながら、標準の WPF コントロールは PixelSense では機能しないようです。PixelSense のこの小さなコード サンプルで簡単に確認できるように、ユーザー入力に反応するために、次のようなコントロールCheckBox
を置き換える必要があります。SurfaceCheckBox
var item = new ScatterViewItem();
var sp = new StackPanel();
item.Content = sp;
item.Padding = new Thickness(20);
sp.Children.Add(new CheckBox() { Content = "CheckBox" });
sp.Children.Add(new SurfaceCheckBox() { Content = "SurfaceCheckBox" });
myScatterView.Items.Add(item);
どうやら、これは WPF ユーザー コントロールを変更せずに PixelSense に表示できないことを意味します。これは、PixelSense プレゼンテーション レイヤーに関する Microsoft のドキュメントなどのリソースのステートメントで確認されているように、WPF ツリー ビューに関連するこのようなSO の質問も参照しています。へ、PixelSense WPF レイヤーに関するこのブログ投稿、またはPixelSense 用に WPF デスクトップ アプリケーションを書き直す方法に関するこの SO の質問。後者のページでは、必要な変更を最小限と呼んでいますが、それでも変更です。
さらに、 PixelSense で特定の WPF デスクトップ コントロールを使用する方法に関するこの SO の質問に対する反応は、 .NET 4.0 を使用すると物事が簡素化される可能性があることを示唆していますが、PixelSense 1.0 SDK で.NET 4.0 がサポートされているとは思いません(これは .NET 3.5 です)。 -私が知る限り、ベース)。
ソフトウェア エンジニアとして、同じプログラミング言語を 2 回使用して、同じ GUI フラグメント (データ モデルに対して同じ動作をする同じレイアウトの同じコントロールで構成される) を記述する戦略にはまだ同意できません。これは間違っているようです。
したがって、これまでに見つけた3つの解決策は次のとおりです。
- 標準 WPF の GUI フラグメントを記述します。次に、スクリプトを使用してこれらの GUI フラグメントを含むライブラリをコピーし、関連するすべての Xaml ファイルを (XSLT などを使用して) 標準の WPF コントロールを
Surface*
対応するものに置き換える方法で変換します。
欠点:- WPF プロジェクトで何かが変更されるたびに、常にスクリプトを機能させて実行するために必要なメンテナンスの増加。
- また、考慮すべき Xaml ファイルと、どのコントロールを何に置き換えるか (追加のサードパーティの PixelSense コントロールを考えてください...) を定義することは、複雑になる可能性があります。
- 最後に、生成された PixelSense-Project は、Xaml ファイルを除いて WPF プロジェクトの正確なコピーになるため、PixelSense 固有のコードを導入することはできません (または、可能であれば、PixelSense プロジェクトを生成するためのスクリプトがさらに多くなります)。繁雑)。
- PixelSense/Surface のみを対象とし、デスクトップ ユーザーに Surface SDK をインストールしてもらいます。提案してくれたユーザーClemensに感謝します!
欠点:- ユーザーはSurface 1.0 SDKをインストールする必要があります。これは、現在のシステムでは重要な操作です。Surface 1.0 SDKを Windows 7 64 ビット マシンで実行するには、MSI ファイルのパッチ適用などのさまざまなアクションを実行する必要があります。
- PixelSense/Surface 1.0 シミュレーターは、デスクトップ コンピューターで Surface 1.0 アプリケーションを実行できる唯一の方法です。このシミュレーターはあまり使い物にならず、一部のシステムではまったくバグがあります: 私のコンピューターでは、次のように表示されます:
(出力はシミュレーター ウィンドウの 3/4 しかカバーしていませんが、入力はウィンドウ全体に登録されています。サーフェス シミュレーションの右下隅をクリックするには、シミュレータ ウィンドウの (明らかに透明な) 右下隅をクリックする必要があります。)
- GUI を作成するときは、標準の WPF または PixelSense コントロール クラスを明示的に使用するのではなく、適切なコントロール タイプを作成するプラットフォーム固有のファクトリを使用します。
欠点:- GUI フラグメントを Xaml で記述することはできなくなりました。少なくともほとんどのコントロールとそのすべてのバインディングは、C# コードで作成する必要があります。
私は現在、3 番目のオプションに傾倒しています。これは、プラットフォームに依存しないために支払うのに許容できる代償のように思えるからです。それでも、WPF がデスクトップと PixelSense GUI の間の接続要素であるため、これは頻繁に発生する問題であり、これまでに解決されていないのではないかと思います。だから、私はここで尋ねています:これは通常どのように行われますか?
PS: 向きは問題ではありません。前述の GUI フラグメントは、PixelSense では回転可能な ScatterViewItem に表示され、デスクトップでは通常の垂直方向に表示されます。