c# - 恢复的 WPF 窗口
问题描述
我可以选择最小化启动我的主窗口。窗口设置为 SizeToContent="WidthAndHeight"。当我单击恢复窗口时,它打开的窗口大于初始宽度和高度。我在 MainWindow.xaml.cs 中使用以下内容
private void WindowStart()
{
if (LocalSystem.StartMinimized)
{
WindowState = WindowState.Minimized;
ShowInTaskbar = true;
}
if (LocalSystem.StartOnTop)
{
Topmost = true;
}
Activate();
}
解决方案
考虑跟踪 WPF 窗口的状态变化。添加 Window 的 StateChanged 事件的事件处理程序并跟踪 Window 的宽度和高度。
您可以像这样跟踪窗口的大小:
public MainWindow() {
InitializeComponent();
_lastState = this.WindowState;
_initialWidth = this.ActualWidth;
_initialHeight = this.ActualHeight;
this.StateChanged += Window_StateChanged;
}
WindowState _lastState;
double _initialwidth, _initialHeight;
private void Window_StateChanged(object sender, EventArgs e)
{
if (this.WindowState != _lastState)
{
if (_lastState == WindowState.Minimized && this.WindowState == WindowState.Maximized){
this.Width = _initialWidth;
this.Height = _initialHeight;
}
_lastState = this.WindowState;
}
}
注意 ActualHeight 和 ActualWidth 的使用。在 InitializeComponent 在其构造函数中运行后,将知道 Window 的实际尺寸。一个恢复的或未最小化的,正如你所说的那样,窗口是状态从 WindowState.Minimized 到 WindowState.Maximized 的窗口。
请注意,我们尽量减少 WPF 应用程序中的代码量,因为最佳实践是使用 MVVM。您可以考虑创建一个 WPF 行为类来恢复 Window 的初始大小,毕竟它是一种通用行为。
推荐阅读
- angular - 将数据从一个组件传递到多个组件的有效方法是什么?
- python - Django 测试:self.client.post 没有被第二次执行
- jquery - JQuery 中的默认选项/组合框
- ios - UITableView 中带有 NSFetchedResultsController 的附加部分
- excel - VBA从存储过程中获取输出参数
- apache-spark - 如何在使用火花数据帧比较 2 个文本文件时检查 NULL 值
- r - 如何从具有样式和内容的文本文件(word 或 libreoffice)中提取数据库
- sql - SQL 动态字符串过滤器
- python - Python:为什么这个数组是对象而不是浮点数?
- c# - 仅从扩展中获取文件图标,不存在