【问题标题】:Border with negative margin disappears when resizing window调整窗口大小时,负边距的边框消失
【发布时间】:2017-03-25 21:59:55
【问题描述】:

我有一个网格和网格内的两个边框元素。当我缩小窗口时,外边框消失。有人知道为什么以及如何防止它消失吗? 这是主窗口的布局:

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

当我调整它的大小时会发生以下情况:

如果我缩小窗口,外部(蓝色)边框将不可见。我知道可以解决它,但我想知道为什么会这样。

【问题讨论】:

标签: c# wpf layout


【解决方案1】:

您正在设置网格上的高度,并且它始终具有相同的大小(如果您调整主窗口大小无关紧要)。如果您希望边框占据所有窗口并随之调整大小,请删除网格上的高度。

【讨论】:

    【解决方案2】:

    发生这种情况是因为 Grid 元素在无法以全尺寸显示内容时会对其进行剪辑。即使 UIElement 基类不执行任何剪辑,除非设置了 ClipToBounds,但中间的 FrameworkElement 类会覆盖此行为并在内容不适合该区域时剪辑内容。剪贴蒙版的几何由 GetLayoutClip() 方法确定。从裁剪区域中减去边距,结果外边框消失。

    来自 MSDN FrameworkElement.GetLayoutClip():

    返回剪贴蒙版的几何图形。如果布局适用掩码 系统试图安排一个大于 可用的显示空间。

    备注:作为布局的一部分,layoutSlotSize 会减去边距 系统行为。

    返回的空引用表示不会发生剪辑。这 当 ClipToBounds 为 false 时,默认实现始终返回 null。 此方法覆盖 UIElement.GetLayoutClip。框架元素 实现在其计算中使用 MaxHeight 和 MaxWidth。 FrameworkElement 的几个子类又重写了这个方法。

    可以使用根本不会进行任何剪辑的网格(取自answer):

    public class MyGrid : Grid 
    {
        protected override Geometry GetLayoutClip(Size layoutSlotSize) 
        {
            return null;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 2013-07-12
      • 1970-01-01
      • 2011-09-22
      • 2013-03-27
      • 2016-12-03
      • 1970-01-01
      相关资源
      最近更新 更多