2017-06-29 143 views
0

讓我們假設你有一個WPF窗口,其中一個元素隨着窗口大小的改變而改變它的大小,比如DockPanel有兩個元素。您最大化窗口,第二個元素也得到最大化。所以我不能讀取它的高度/寬度,這些將是最大值(這對我的目的來說足夠好,所以我不必擔心任務欄是否需要一些空間或類似問題)。如何計算元素的最大寬度/高度?

好的,但讓我們回到剛剛啓動的窗口 - 我想計算給定元素的最大寬度/高度,而不實際調整窗口的大小,只是純粹的計算。它可行嗎?怎麼樣?

+0

你想要計算寬度和高度的元素是什麼?根據你想要計算的信息?你不能簡單地訪問該元素的屬性,並獲得寬度和高度? – pijemcolu

+0

@pijemcolu,'ListBox','TextBox',任何元素。 「高度」給你當前的高度,而不是最大值。 – astrowalker

+0

根據您認爲某個元素的最大寬度高度值是什麼? – pijemcolu

回答

1

如果我正確理解你,你想知道窗口的最大尺寸。那將是屏幕的大小。屏幕尺寸是一個可用值:

System.Windows.SystemParameters.PrimaryScreenWidth 
System.Windows.SystemParameters.PrimaryScreenHeight 

也許你可以做這樣的事情:窗口

  • 獲取大小
  • 獲取大小
  • 計算偏移(windowSize - elementSize)
  • 獲取屏幕尺寸
  • 計算最大尺寸(screenSize - offset)
+0

謝謝,但我想獲得窗口給定元素的最大寬度/高度,而不是最大化整個窗口。例如它可以是'ListBox'。 – astrowalker

+0

我編輯了我的答案。也許可以暗示正確的方向 –

+0

你太棒了! 「當然」 - 當你知道答案時:-) – astrowalker

1

您可以創建一個測試窗口,顯示爲最大化,獲取其寬度和高度,然後關閉它。 假設您將檢查屏幕分辨率是否未更改,則可以在每次需要計算值時或在應用程序的開始時執行此操作。

private void GetMaximumWidthAndHeight(FrameworkElement element) 
{ 
    var testWindow = new Window(); 
    testWindow.Visibility = Visibility.Collapsed; 
    testWindow.ShowInTaskbar = false; 

    testWindow.WindowState = WindowState.Maximized; 
    testWindow.Show(); 

    var maximizedWindowHeight = testWindow.ActualHeight; 
    var maximizedWindowWidth = testWindow.ActualWidth; 

    testWindow.Close(); 

    var maxToCurrentHeightRatio = maximizedWindowHeight/this.ActualHeight; 
    var maxToCurrentWidthRatio = maximizedWindowWidth/this.ActualWidth; 

    var maximumElementHeight = element.ActualHeight * maxToCurrentHeightRatio; 
    var maximumElementWidth = element.ActualWidth * maxToCurrentWidthRatio; 

    // Do something with the values 
} 
+0

謝謝,但在我的情況下,在開始時最大化窗口並且然後恢復正常更簡單。但是,當然,完全取消調整大小會很好。 – astrowalker