在 WPF 中,我有一个窗口,我希望其高度根据内容调整大小(并动态调整,因为我有一个 Expander )并阻止用户能够更改它,但让他/她能够改变窗口的宽度。
我怎样才能实现这个目标?
SizeToContent 就成功了一半,因为它不限制手动更改高度。 ResizeMode 无法阻止仅更改高度或宽度。 在 SizeChanged 事件中,我无法区分更改是自动启动还是由用户启动以防止更改高度。
您可以使用
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;
}
}