的邏輯據我所知,GetLayoutClip(從靜態類LayoutInformation中調用)將產生一個幾何外部的WPF中的佈局將剪輯UIElement(當然,除非,如果UIElement是其中裁剪在默認情況下處於關閉狀態 - 例如Canvas)。爲了更好地理解邏輯,我試着用Grid來試驗它,但是我得到了一些我覺得有點奇怪的結果。我已經使用下面的代碼來進行實驗。WPF的GetLayoutClip()
XAML:
<Window x:Class="TestSolution.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Width="216" Height="139" Loaded="Window_Loaded">
</Window>
,並在後臺代碼:
private Grid panel;
public MainWindow()
{
InitializeComponent();
panel = new Grid();
panel.Margin = new Thickness(0,70,10,0);
panel.Width = 150;
panel.Height = 100;
panel.ClipToBounds = true;
Content = panel;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine(panel.DesiredSize);
Debug.WriteLine(panel.RenderSize);
Debug.WriteLine(LayoutInformation.GetLayoutClip(panel).Bounds);
}
注意到,我強迫ClipToBounds。不出所料,GetLayoutClip返回一個Rectangle =(0,0,150,30),這是完全有道理的;幾何圖形始於GridPanel的原點,並將窗口下方和網格寬度外的所有內容剪切(包括任何會溢出到右邊的邊界內的東西)。
但是,如果我們關閉ClipToBounds,則矩形將變爲(-20,0,190,30)。好的,所以-20對我來說很有意義。相對於網格的原點,讓你到左邊窗口的邊緣。 0也是有意義的,因爲從頂端開始70,並且網格在Y方向開始。爲什麼190寬度雖然?電網本身終止在170和180,包括右邊的餘量。沒有什麼東西在190年自然結束。爲什麼是190?
如果-20對你有意義,那麼190也應該是有意義的,因爲它意味着一個寬度,其中20被加到左邊和右邊,即20 + 150 + 20。 – Clemens
@Clemens好吧,不是。 -20將簡單地定義幾何從父容器的X方向的原點開始,而在正X方向上的190最終在無處中間結束(即,網格不會在那裏結束,網格加其邊際)。儘管如此,我認爲你的觀點至少會加起來。儘管在裁剪區域的定義方面沒有多大意義。 –
這是怎麼回事?我在任何地方都看不到任何20的左邊距。無論如何,我認爲網格的保證金是無關緊要的。 – Clemens