如何在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

Answers:


213

如果只需要一个外部边框,最简单的方法是将其放在Border控件中:

<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个...)


它不能按我想要的方式工作...我在问题中添加了一些代码。
Jason94

3
@ Jason94:我更新了答案,向您展示了如何获得我认为的目标……
Reed Copsey 2010年

@ReedCopsey Reed,我知道您的解决方案有效,但我不明白的是为什么Border元素位于Grid元素内-这不是很直观吗?谢谢。
Sabuncu

2
@Sabuncu您会注意到我的原著没有-我正在制作OP的编辑“作品”
Reed Copsey 2013年

1
这似乎是在我的主窗口内部而不是封装在其中的网格外部周围放置寄宿生。有什么想法吗?
布雷迪

9

如果将网格嵌套在边框控件中

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

如果您没有执行您想要的操作,那么您将不得不为自己要执行的操作的网格(或边框)制作自己的控制模板。


哦... okey:D认为有一个变量我忽略了,或者有些花哨的WPF(我是新来的:D)
Jason94年

您无法为Grid和Border创建模板,因为它们没有Template属性,因为它们不是从Control而是从Panel和Decorator派生的。Reed Copsey具有(非常简单)的解决方案
gehho 2010年

2

我认为您的问题是,应在border标签而不是网格中指定边距。


2

如果以后对任何人都有用,这是以后对我有用的答案。我想要在网格的所有四个侧面上都有一个简单的边框,所以我做到了……

<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'7

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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.