如何计算元素的最大宽度/高度?

时间:2017-06-29 11:30:16

标签: c# wpf size

假设您有一个WPF窗口,其中一个元素会随着窗口大小调整而改变大小,请说DockPanel有两个元素。您最大化窗口,第二个元素也最大化。所以我不能读取它的高度/宽度,这些值是最大值(这对我的目的来说已经足够了,所以如果任务栏占用一些空间或类似的问题,我不必担心。)

好的,但让我们回到刚刚启动的窗口 - 我想计算给定元素的最大宽度/高度而不实际调整窗口大小,只是纯粹的计算。它可行吗?怎么样?

2 个答案:

答案 0 :(得分:1)

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

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

也许你可以这样做:

  • 获取窗口大小
  • 获取元素大小
  • 计算偏移量(windowSize - elementSize)
  • 获取屏幕尺寸
  • 计算最大尺寸(screenSize - offset)

答案 1 :(得分: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
}