2016-11-11 120 views
0

我在網格中有一個網格和兩個邊界元素。當我縮小窗口時,外邊框消失了。有誰知道爲什麼以及如何防止它消失? 這裏是主窗口的佈局:當調整窗口大小時,帶負邊界的邊框消失

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

這裏是發生了什麼,當我調整它的大小:

enter image description here

外(藍色)的邊界是不可見的,如果我使窗口小。我知道可以解決它,但我想知道爲什麼會發生這種情況。

+0

你想建立在WPF某種響應式佈局的。如果是所以,然後檢查這個問答:http://stackoverflow.com/questions/24909458/how-to-make-a-wpf-window-responsive – Hackerman

回答

1

發生這種情況是因爲Grid元素無法以全尺寸顯示時剪切內容。即使UIElement基類不進行任何剪裁,除非設置了ClipToBounds,但中間的FrameworkElement類會覆蓋此行爲,並在內容不適合該區域時剪輯它。剪貼蒙版的幾何體由GetLayoutClip()方法確定。從裁剪區域減去邊距,結果外邊界消失。

從MSDN上FrameworkElement.GetLayoutClip()

返回剪切蒙版的形狀。如果系統佈局 嘗試排列大於可用顯示空間的元素,則應用該掩碼。

備註:邊距將從layoutSlotSize中減去,作爲佈局 系統行爲的一部分。

返回的空引用表示不會發生剪切。當ClipToBounds爲false時, 默認實現始終返回null。 此方法重寫UIElement.GetLayoutClip。 FrameworkElement 實現在其計算中使用MaxHeight和MaxWidth。 FrameworkElement的幾個子類再次覆蓋此方法。

它可以使用一個網格,不會做的所有削波(從這個answer拍攝):

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

您正在設置網格高度,並且它始終具有相同的大小(如果調整主窗口的大小,則無關緊要)。如果您希望邊框佔據所有窗口並使用它調整大小,請刪除網格上的高度。

相關問題