【问题标题】:How to compute maximum width/height of the element?如何计算元素的最大宽度/高度?
【发布时间】:2017-06-29 11:30:15
【问题描述】:

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

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

【问题讨论】:

  • 您要计算哪个元素的宽度和高度?您想根据什么信息来计算?您不能简单地访问该元素的属性并获取宽度和高度吗?
  • @pijemcolu,ListBoxTextBox,任何元素。 Height 为您提供当前高度,而不是最大值。
  • 您认为元素的最大宽度高度是多少?

标签: c# wpf size


【解决方案1】:

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

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

也许你可以这样做:

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

【讨论】:

  • 谢谢,但我想获得窗口给定元素的最大宽度/高度,而不是最大化整个窗口。例如,它可能是ListBox
  • 我已经编辑了我的答案。也许可能是正确方向的提示
  • 你太棒了! “当然”——当你知道答案时:-)
【解决方案2】:

您可以创建一个显示为最大化的测试窗口,获取其宽度和高度,然后将其关闭。 这可以在您每次需要计算值时或在应用程序启动时完成,假设您将检查屏幕分辨率是否没有改变。

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
}

【讨论】:

  • 谢谢,但在我的情况下,在开始时最大化窗口然后恢复正常会更简单。但是,当然最好完全取消调整大小。
猜你喜欢
  • 2015-12-16
  • 2020-01-10
  • 2011-03-03
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
相关资源
最近更新 更多