2011-04-27 89 views
4

可能是一個令人困惑的問題標題。爲什麼我的面板在製作尺寸小於顯式尺寸時一直夾在面板周圍?

帶紅色矩形的網格是它應該如何看的一個例子。

具有藍色矩形(未出現在圖像中)的網格有一個邊距,強制第二個網格比我明確設置的要小。這似乎導致WPF翻轉並隱藏它的排列邊界外的所有內容。

enter image description here

我試過設置剪輯比網格大。

我一直能夠避免這種情況的唯一方法是編寫一個自定義面板,測量它是否具有PositiveInfinity約束的兒童,然後以正確的寬度排列子節點。該方法存在很多問題。對你的孩子撒謊是不好的。

總之,這裏的代碼:

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="NegativeMarginTooMuchClipping.MainWindow" 
x:Name="Window" 
Title="MainWindow" 
Width="640" 
Height="400"> 

<Grid> 
    <StackPanel Width="600" Height="300"> 
    <Grid Margin="40,50,60,50" Background="#FFB8B8B8" Width="500" Height="50"> 
     <Rectangle Fill="Red" HorizontalAlignment="Left" Height="50" VerticalAlignment="Top" Width="50" Margin="0,-50,0,0"/> 
    </Grid> 
    <Grid Margin="40,50,61,50" Background="#FFB8B8B8" Width="500" Height="50"> 
     <Rectangle Fill="Blue" HorizontalAlignment="Left" Height="50" VerticalAlignment="Top" Width="50" Margin="0,-50,0,0"/> 
    </Grid> 
    </StackPanel> 
</Grid> 

已知問題?我做錯了嗎?需要更多的澄清?

+0

首先您將藍色矩形網格外面,然後你甚至將它進行的跨的StackPanel的界限,藍色矩形是不開心。 – 2011-04-27 23:08:24

回答

8

有三樣東西是進入到確定一些東西是如何剪輯。前兩個是ClipToBoundsClip,但第三個是一個小更惱人的,這是GetLayoutClip

缺省情況下,所述的UIElement GetLayoutClip方法將返回null或RectangleGeometry大小相同的元件,這取決於ClipToBounds屬性。 FrameworkElement和它的派生,雖然更復雜。看看Reflector/ILSpy,你會明白我的意思。

雖然您可以重寫此行爲。如果你使用類似以下內容作爲格爲藍色長方形,那麼它將不再被裁剪:

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

有這個here一個偉大的博客文章。

+0

太棒了。謝謝!你救了我更多的心痛。這確實是一個令人討厭的小方法。 – chrislarson 2011-04-28 12:54:37