WPFでグリッドに境界線を配置するにはどうすればよいですか?


119

C#/ WPFでグリッドに境界線を配置するにはどうすればよいですか?

これは私が望んでいるものですが、アプリケーションに配置したグリッドコントロールの代わりに、全体の周囲に境界線を配置します。

<Grid>
    <Border BorderBrush="Black" BorderThickness="2">
        <Grid Height="166" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top" Width="479" Background="#FFF2F2F2" />
    </Border>
... and so on ...

1
「全体」とはどういう意味ですか?私はあなたがあなたのグリッドの中に何か他のものを持っていると思います-あなたはおそらくそれが何であるかを投稿するべきです。私の疑いは、ある種のデータグリッドコントロールとグリッドコンテナー(サンプルに入れたもので、おそらく「全体」が含まれている)があり、そこに混乱が生じるということです。
Dan Puzey

回答:


213

外側の境界線だけが必要な場合、最も簡単な方法は、境界線コントロールに配置することです。

<Border BorderBrush="Black" BorderThickness="2">
    <Grid>
       <!-- Grid contents here -->
    </Grid>
</Border>

ボーダーがコントロールを完全に埋めているのは、デフォルトでHorizo​​ntalAlignmentとVerticalAlignmentがStretchに設定されているためです。以下を試してください:

<Grid>
    <Border  HorizontalAlignment="Left" VerticalAlignment="Top"  BorderBrush="Black" BorderThickness="2">
        <Grid Height="166" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid1" VerticalAlignment="Top" Width="479" Background="#FFF2F2F2" />
    </Border>
</Grid>

これはあなたが何をしているのかをあなたが得るはずです(あなたは2つだけではなく4つすべての辺にマージンを置きたいかもしれません...)


期待どおりに動作しません...質問にコードを追加しました。
Jason94

3
Jason94 @:私は、私はあなたが...後だと思うものを取得する方法をお見せするために私の答えを更新
リードCopseyを

@ReedCopsey Reed、私はあなたの解決策が機能することを知っています、私が理解していないのは、Border要素がGrid要素の中にある理由です-これは直観的ではありませんか?ありがとうございました。
Sabuncu 2013

2
私はOPの編集「仕事」作っていた- @Sabuncuは、あなたは私のオリジナルであること持っていなかったことに気づくでしょう
リードCopsey

1
これにより、境界線がメインウィンドウの内側にカプセル化されているグリッドの外側ではなく、メインウィンドウの内側に配置されているようです。何かアイデアはありますか?
Brady

9

グリッドをボーダーコントロールにネストする場合

<Border>
    <Grid>
    </Grid>
</Border>

はあなたが望むことをしません、そしてあなたはあなたが望むことをするグリッド(またはボーダー)のためにあなた自身のコントロールテンプレートを作らなければならないでしょう。


ああ... okey:D私が見落とした変数または何か派手なWPF(それについては新しい:D)があると
思った

グリッドとボーダーのテンプレートは、コントロールからではなくパネルとデコレーターから派生しているため、テンプレートプロパティがないため作成できません。Reed Copseyには(かなりシンプルな)ソリューションがあります。
gehho

2

あなたの問題は、マージンはグリッドではなく境界タグで指定されるべきだと思います。


2

これは、将来誰かに役立つかもしれない場合、私にとって有効な後の回答です。グリッドの4辺すべての周りにシンプルな境界線が必要でした。

<DataGrid x:Name="dgDisplay" Margin="5" BorderBrush="#1266a7" BorderThickness="1"...

Gridコントロールは持っていないBorderBrush属性は、しかしDataGridい...
ΩmegaMan

1
<Grid x:Name="outerGrid">
    <Grid x:Name="innerGrid">
        <Border BorderBrush="#FF179AC8" BorderThickness="2" />
        <other stuff></other stuff>
        <other stuff></other stuff>
    </Grid>
</Grid>

このコードは、「innerGrid」内に境界線をラップします


こんにちは@ElvinMammadov。もっと詳しく説明してください。エラーが発生していますか?このコードは私には問題なく動作します。
PJ3 2016

1
BorderタグにGrid.ColumnSpan = "カバーしたい列"を追加する必要があります。Grid.RowSpan = "カバーしたい行"。それ以外の場合は、最初のセルのみをカバーします。
user3707094

0

誰かが同様の問題に関心を持っているが、XAMLを使用していない場合、これが私の解決策です:

var B1 = new Border();
B1.BorderBrush = Brushes.Black;
B1.BorderThickness = new Thickness(0, 1, 0, 0); //You can specify here which borders do you want
YourPanel.Children.Add(B1);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.