WPFのHTMLセルスペースが恋しいです。グリッドからカスタムグリッドクラスをオーバーライドし、MeasureOverrideとArrangeOverrideを変更して目的の動作を取得することにより、WPFのグリッドに同様の何かを実装しようとしています。つまり、グリッド内の各セルは、他のセルに対して固定間隔(パディングではない)である必要があります。これはどのように行うことができますか?
4 に答える
セル間隔を使用して独自のレイアウトを実行する独自のパネル、またはグリッドの子孫を作成することもできます。それはかなりの作業になるでしょう。
同じことを達成するために、私が代わりに通常行うことは次のとおりです。3ピクセルのセル間隔が必要だとします。これを実現するには、各セルに1.5ピクセルのマージンを適用し(セルとその隣接セル間の合計スペースは1.5 + 1.5 = 3ピクセル)、グリッド全体の周囲にさらに1.5ピクセルのマージンを適用して、外側のマージンを正しくします(セルの周囲1.5ピクセルのマージン+グリッドの周囲の1.5ピクセルのマージン=3ピクセル)。XAMLは次のようになります。
<Grid Margin="1.5">
...
<Label Grid.Row="0" Grid.Column="0" Margin="1.5">...</Label>
<TextBox Grid.Row="0" Grid.Column="1" Margin="1.5">...</TextBox>
...
</Grid>
それは醜いですが、それは動作します。
グリッド内のほとんどのコントロールが同じタイプである場合(たとえば、すべてのラベル、またはすべてのラベルとテキストボックスの場合)、グリッド内のすべての要素でマージンを宣言および再宣言する代わりに、スタイルを使用できます。
<Grid Margin="1.5">
<Grid.Resources>
<Style TargetType="Label">
<Setter Property="Margin" Value="1.5"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="Margin" Value="1.5"/>
</Style>
</Grid.Resources>
...
<Label Grid.Row="0" Grid.Column="0">...</Label>
<TextBox Grid.Row="0" Grid.Column="1">...</TextBox>
...
</Grid>
実際、実際には、不均一なマージンが必要になることがよくあります。たとえば、上下左右に3ピクセルのマージンが必要な場合がありますが、下部にはマージンがありません(その下のコントロールにはすでにマージンがあるためです)。独自のマージン)。ですから、私は通常、全体で1.5ピクセルを使用することにはなりません。私は通常、もっと複雑なものになってしまいます。だから私は彼らがCellSpacingを追加しなかった理由を見ることができます。単純なケースは単純になりますが、より複雑なレイアウトでは役に立ちません。
ただし、Half-margins-all-aroundは、CellSpacingを実現するための簡単な方法です。さらに、より洗練されたものが必要な場合は、マージンを微調整できます。
セル間の間隔を処理するカスタムグリッドパネルの作成に関する次のブログ投稿を見つけました:http://daniel-albuschat.blogspot.dk/2011/07/gridlayout-for-wpf-escape-margin-hell.html
ここでの私の答えに興味があるかもしれません。カスタムグリッド内の各子の均一な境界線とセル間隔をサポートしています。
あなたはMarginプロパティを探しています。DataGridCellクラスのスタイルを設定できます。
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Setter Property="Margin" Value="3" />
</Style>