2

そのため、私は WPF を初めて使用し、学習経験として単純なレベル エディターを WPF に実装すると考えました。エディターの目的は 2 つあります。まず、任意の方向のバウンディング ボックスをレベル内の「ソリッド」エリアとして定義できるようにしたいと考えています。次に、画像を配置、サイズ変更、傾斜できるようにしたいと考えています。

ポリゴン エディタ イメージ

Canvas を使用して、向きのあるバウンディング ボックスを描画する機能を実装しました (上の画像を参照)。キャンバスとツールバーはドック パネル内にあります。現在、画像機能の実装を計画しています。私がやろうと思ったのは、画像のレイヤーごとに別の Canvas レイヤー (おそらく多数) を作成することです。そうする理由は、各レイヤーの選択と可視性を簡単に制限できるからです。ただし、複数のキャンバス コントロールを適切にレイヤー化する方法がわかりません。確かに、現在使用している DockPanel コンテナーでは、複数のコントロールを重ねることはできません。キャンバス レイヤーを別のキャンバスに埋め込むことを考えましたが、これを適切に設定する方法がわかりません (ユーザーが必要に応じてレイヤーを追加できるようにするため、設定はコードで動的にする必要があることに注意してください)。

理想的な最終結果は、背景が透明で (背後のレイヤーが見えるように)、簡単に非表示にできる任意の数のレイヤーです。また、一度にユーザー入力を受け取るレイヤーは 1 つだけです。

だから私の質問は、キャンバスを重ねるよりも適切なアプローチですか? キャンバスのレイヤー化が良い方法である場合、誰かがリンク/サンプルコードを提供して、これをセットアップする方法を説明できます。複数のスタックされたコントロールに最適なコンテナーは何ですか (子キャンバスのサイズは親コンテナーと一致する必要があることに注意してください)。

乾杯!

4

1 に答える 1

6

代わりに代替案を提案できますか?

  • パネルを描画面としてItemsControl利用する を作成します。Canvas
  • ItemsControl.ItemsSourceを座標情報を含むカスタム オブジェクトのコレクションにバインドします。
  • を使用しDataTemplateて、キャンバス上で各項目を視覚的に表現する方法を制御します。または、複数DataTemplateの を使用し、 aを使用しDataTemplateSelectorて条件付きで適用するものを選択することもできます。

XAML:

<ItemsControl ItemsSource="{Binding Path=MyObjectList}">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <Canvas />
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <Rectangle Canvas.Left="{Binding Path=X}" Canvas.Top="{Binding Path=Y}"
                    Canvas.ZIndex="{Binding Path=Z}" ... />
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

C#:

public class MyObject
{
    public double X { get; set; }
    public double Y { get; set; }
    public int Z { get; set; }

    // Additional proeprties...
}

これは、多数のキャンバス パネルを互いに積み重ねるよりも、おそらく優れた代替手段です。


非常に優れたリソースからの抜粋:

始める前にいくつかのことをおさらいしましょう... 「C」は Collection を表し、ItemsControl は非常に予測可能な方法で (つまり、CollectionView として) アイテムのコレクションを表示することを学びました。次に、'D' は DataTemplate です。コレクション内の項目は任意の CLR オブジェクトであり、項目の視覚的表現は視覚要素のテンプレート (DataTemplate と呼ばれます) を使用して定義されることを学びました。

論理的に発生する次の質問は、「これらのビジュアルをどこに配置するか」です。より具体的には、アイテムのデータ テンプレートが膨張したら、そのビジュアルをどこに配置する必要がありますか? この質問に答えるために、ItemsControl 内のアイテムの「レイアウト」がどのように処理されるかを調べます。

基本的:

  • ItemsControl - アイテムのコレクション
  • DataTemplate - 各項目を視覚的に表現する方法
  • パネル - 各視覚的表現がどのようにレイアウトされているか。
于 2013-09-27T02:09:44.647 に答える