2009-09-17 73 views
1

使用以下XAML時,窗口大小不是5000x5000,而是一些裁剪按鈕的小窗口。未指定SizeToContent時的窗口大小

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" > 
    <Button Width="5000" Height="5000">XXX</Button> 
</Window> 

從我可以告訴,大小沒指定SizeToContent屬性,默認爲「手動」,所以它會使用*size of a window is determined by other properties, including Width, Height, MaxWidth, MaxHeight, MinWidth, and MinHeight. *WPF Windows Overview,似乎與其他屬性是FrameworkElement的::了minHeight /寬,和FrameworkElement :: MaxHeight。但是因爲Mins的默認值是0,Maxs是無窮大,寬度/高度是Nan ....發生了什麼事? WPF在哪裏獲得窗口大小?

任何指向正確的方向將不勝感激。

回答

4

如果未指定寬度和高度,則WPF將使用主屏幕(實際顯示窗口的位置)的60%和其高度的60%。這由所有Windows最終註冊自己的應用程序單例完成。

0

我想操作系統已經提供了這些值的窗口。它可能與Windows操作系統在最後一次關閉之前記住任何窗口的大小有關。*

同樣的方式,我認爲窗口在沒有指定尺寸的情況下爲窗口提供默認高度和寬度。

  • 你可以用記事本試一下。打開它。調整它的大小。關閉它。現在再次打開它。嗯..
+0

不是一個真正的答案。這是如何定義「手動」設置(當手動調整大小時的窗口大小)。問題在於它是從哪裏獲得的。 – moogs 2009-09-25 07:09:47

+0

記事本正在寫入並將其位置寫入註冊表:[HKEY_CURRENT_USER \ Software \ Microsoft \ Notepad]這是包括第三方在內的大多數應用程序的最佳實踐。 – bitbonk 2009-10-01 09:34:30

0

我認爲你要找的信息被埋在FrameworkElement.Widthlink)的文檔中。

除了可接受的Double值之外,該屬性也可以是Double.NaN。這是您如何指定自動調整大小的行爲。在XAML中,將值設置爲字符串「Auto」(不區分大小寫)以啓用自動調整大小行爲。自動調整大小行爲意味着元素將填充可用的寬度。 但請注意,特定的控件經常會以其默認樣式提供默認值,除非專門重新啓用它,否則將禁用自動調整大小行爲。 [我的重點]

所以,從這個,我希望的是,窗口的寬度/高度有設置(如MaxWidthMinWidthWidth等)由確定沒有其他約束窗口的默認樣式。

編輯:

看起來它更可能是來自一個由Window類本身,考慮到所有的約束顯示器大小調用的函數。

1

我在MSDN中找不到明確指定默認大小的任何內容,但Top,LeftWindowStartupLocation屬性說明指出,如果未指定,它們默認爲正常的Win32默認值。我認爲這是合理的假設HeightWidth屬性會做同樣的。

如果你不希望這樣的事情發生了你的窗口,那麼你必須明確地設置要麼WidthHeight或根據您的要求Window元素的SizeToContent財產。如果Window.SizeToContent = True,您在Button元素上設置的顯式大小僅對Window有效。

+0

應該說「如果Window.SizeToContent = WidthAndHeight。」 SizeToContent接受一個枚舉值,而不是布爾值。 (我首先假定它是布爾值)。 – stone 2010-07-23 18:29:56

+0

這取決於內容。如果窗口是某種對話框,我會設置'SizeToContent = WidthAndHeight',但是對於普通的應用程序UI窗口來說'SizeToContent = Manual'。 – 2010-07-24 08:18:21

相關問題