我在网格中有一个网格和两个边框元素。当我使窗口变小时,外边框消失。有谁知道为什么以及如何防止它消失? 这是主窗口的布局:
<Window x:Class="TestBorder.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestBorder"
mc:Ignorable="d"
Title="MainWindow" Height="170" Width="225">
<Grid Margin="5" Height="100" VerticalAlignment="Top">
<Border BorderBrush="LightBlue" BorderThickness="5" Margin="-5"/>
<Border BorderBrush="Orange" BorderThickness="5"/>
</Grid>
</Window>
以下是我调整大小时会发生的事情:
如果我缩小窗口,则外部(蓝色)边框不可见。我知道有可能解决它,但我想知道为什么会这样。
答案 0 :(得分:1)
这是因为Grid元素在无法以完整大小显示内容时剪切内容。尽管除非设置了ClipToBounds,否则UIElement基类不会进行任何裁剪,中间FrameworkElement类会覆盖此行为,并在内容不适合该区域时剪切内容。剪贴蒙版的几何图形由GetLayoutClip()方法确定。从剪裁区域中减去边距,结果外边框消失。
来自FrameworkElement.GetLayoutClip()上的MSDN:
返回剪贴蒙版的几何体。如果布局,则应用蒙版 系统试图安排一个大于的元素 可用的展示空间。
备注:作为布局的一部分,将从layoutSlotSize中减去边距 系统行为。
返回的空引用表示不会发生剪切。该 当ClipToBounds为false时,默认实现始终返回null。 此方法重写UIElement.GetLayoutClip。 FrameworkElement 实现在其计算中使用MaxHeight和MaxWidth。 FrameworkElement的几个子类再次覆盖此方法。
可以使用根本不进行任何裁剪的网格(取自answer):
public class MyGrid : Grid
{
protected override Geometry GetLayoutClip(Size layoutSlotSize)
{
return null;
}
}
答案 1 :(得分:0)
您正在网格上设置高度,它将始终具有相同的大小(如果您调整主窗口的大小,则无关紧要)。如果您希望边框占据所有窗口并使用它调整大小,请删除网格上的高度。