WPF 根据内容设置窗口高度,宽度可手动调整

问题描述 投票:0回答:1

在 WPF 中,我有一个窗口,我希望其高度根据内容调整大小(并动态调整,因为我有一个 Expander )并阻止用户能够更改它,但让他/她能够改变窗口的宽度。

我怎样才能实现这个目标?

SizeToContent 就成功了一半,因为它不限制手动更改高度。 ResizeMode 无法阻止仅更改高度或宽度。 在 SizeChanged 事件中,我无法区分更改是自动启动还是由用户启动以防止更改高度。

wpf resize sizetocontent
1个回答
0
投票

您可以使用

FrameworkElement.MinHeight
FrameworkElement.MaxHeight
属性来冻结
Window

的当前高度

MainWindow.xaml.cs

partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();

    // Lock the initial height from the Loaded event handler
    this.Loaded += OnLoaded;
  }

  private void OnLoaded(object sender, RoutedEventArgs e)
    => LockWindowHeight();
  
  private void LockWindowHeight()
    => this.MinHeight = this.MaxHeight = this.ActualHeight;

  private void SetWindowHeight(double newHeight)
  {    
    this.MinHeight = double.IsNormal(newHeight) ? newHeight : 0;
    this.MaxHeight = double.IsNormal(newHeight) ? newHeight : double.PositiveInfinity;
    this.Height = newHeight;
  }

  // For the sake of completeness
  private void UnlockWindowHeight(double newHeight)
  {    
    this.MinHeight = 0;
    this.MaxHeight = double.PositiveInfinity;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.