2011-01-17 9 views
3

wpfでカスタムパネルを作成しようとしています。 が私のパネル内の項目を配置しながらここで私が持っている疑問、カスタムパネルを作成する際のHorizo​​ntalAlignmentとVerticalAlignmentの考慮

  • にはどうすればいい たHorizo​​ntalAlignmentとVerticalAlignmentを 要因を考慮します。 ArrangeOverrideメソッドでこれらのフラグをチェックする必要がありますか?
  • 私はWrapPanelを書きたいと考えてください クローン。パネルの幅が "自動"に設定されている場合、パネルの実際の幅は 、私の子供は のアイテムを配置するにはどうすればよいですか?私はいつも ActualWidth/ActualHeightを0にします。私は 何かが欠けていますか?

助けてください。

答えて

2

あなたが水平または垂直のアライメントを行うかどうかはあなた次第です。縦型のStackPanelが子のVerticalAlignmentを考慮すると悪いことになります。

各子コントロールでMeasure()メソッドを呼び出す必要があります。それはあなたに望ましいサイズを与えます。

1

独自のパネルを実装するには、MeasureOverrideArrangeOverrideを実装する必要があります。レイアウト中に物事が把握されるので、最終的な値はまだ入手できません。開始するには、利用可能なサイズであるMeasureOverrideであなたに渡された引数Sizeを使用してください。あなたはこの金額よりも多かれ少なかれ使用することができます。これは、パネルのレイアウト動作によって異なります。あなたが何をしていても、すべての子供にMeasureに電話しなければなりません。もちろん、その情報をあなたの計算に使うことができます。

実装したい特殊なパネル動作がありますが、大量の特別なケースを処理したくない場合は、スタッキングしていない方向に要求するすべてのスペースを子供に与えることができます。子供たちは、必要に応じてサブパネルを使って自分自身を築きました。

0
  • あなたは たHorizo​​ntalAlignmentとVerticalAlignmentを を考慮する必要はありません。これらのプロパティー は、 FrameworkElementによって内部的に使用され、 を自動的に有効にします。
  • という単一の引数ArrangeOverrideは、あなたのパネルに許容される親のサイズが になります。 この エリアに子供を配置する必要があります。 「Auto」がすべてのパネルの子を配置するサイズであることを意味する場合は、MeasureOverrideから計算して返す必要があります。

子供の代わりにInternalChildrenを使用することを忘れないでください。

関連する問題