32

WPF で要素を相対的に配置するにはどうすればよいですか? 標準モデルでは、すべてにレイアウト マネージャーを使用しますが、単純に他の要素の位置に基づいて (たとえば、Canvas 上に) 要素を配置したい場合はどうすればよいでしょうか?

たとえば、パネルの位置やレイアウトに関係なく、ある要素 (ボタンなど) を別の要素 (おそらくパネル) の側面に取り付けたい場合があります。エンジニアリング ツール (SolidWorks、AutoCad など) を扱ったことがある人なら誰でも、この種の相対的な配置に精通しています。

すべてをレイアウト マネージャー (異なる WPF パネル) に強制することは、特定のシナリオではあまり意味がありません。要素が親コンテナーによって維持されていることを気にせず、他の子が変更によって影響を受けないようにする場合です。互いのレイアウト/外観。WPF はこの相対配置モデルを何らかの形でサポートしていますか?

4

2 に答える 2

15

(あなたの例のように)ボタンをキャンバスに直接配置する代わりに、スタックパネルをキャンバスに水平に配置し、そこに2つのボタンを配置できます。

そのようです:

<Canvas>
  <StackPanel Canvas.Left="100" Canvas.Top="100" Orientation="Horizontal">
    <Button>Button 1</Button><Button>Button 2</Button>
  </StackPanel>
</Canvas>

代替テキスト

フォームで複数のレイアウトを使用する場合は非常に柔軟で、必要な構成をほとんど作成できると思います。

于 2008-10-02T09:42:35.490 に答える
11

良い質問。私の知る限り、この機能を利用するには別のカスタム パネルが必要です。WPF は Visual Hierarchy に基づいているため、プラットフォーム内の要素に対してこの種のフラット構造を持つ方法はありません。

しかし、これを行うためのトリックがあります。 要素を同じ位置に配置し、RenderTransform.TranslateTransform を使用して相対的な変位を与えます。このようにして、TranslateTransfrom の X と Y は常に他の要素に関連します。

于 2008-10-01T15:32:57.263 に答える