我尝试仅向TextBlock添加边框,而是在整个网格周围创建边框。这是代码:
<Border BorderBrush="Black" BorderThickness="6">
<TextBlock x:Name="txtInputUsername" HorizontalAlignment="Left" Margin="65,54,0,0" TextWrapping="Wrap" Text="Username" VerticalAlignment="Top" TextAlignment="Center" FontFamily="Open Sans" FontSize="20" Background="#FFF3F3F3" OpacityMask="Black"/>
</Border>
答案 0 :(得分:0)
这种情况正在发生,因为Grid
的子元素将假定它们被放置在Height
(或Width
单元格的Grid
和Grid
在,除非另有说明。 Border
只是看起来就像它绕着网格一样,因为它正在使用它来推断它的大小。
有几种方法可以解决此问题,最简单的方法是指定HorizontalAlignment
到VerticalAlignment
的{{1}}和Border
。这会导致Center
围绕Border
的边界而不是推断其大小。
在你的情况下,由于你使用TextBlock
来定位标签,它仍会产生一些奇怪的结果。 Margin
仍被视为控件的一部分,因此控件周围的任何内容都必须更大才能容纳它。如果可能的话,你应该避免这种情况,但如果真的希望这样做,那么Margin
更多地Margin
。
Border
更好的方法是,要了解不同的layout containers,以及如何使用它们来定位控件,而不是<Grid>
<Border
Margin="65,54,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
BorderBrush="Black"
BorderThickness="6">
<TextBlock
x:Name="txtInputUsername"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Background="#FFF3F3F3"
FontFamily="Open Sans"
FontSize="20"
OpacityMask="Black"
Text="Username"
TextAlignment="Center"
TextWrapping="Wrap" />
</Border>
</Grid>
。这些可以相互嵌套,以一种相当不错,干净的方式创建几乎任何你能想象到的布局。