我有一个WPF应用程序。我需要在实例化它以获得焦点之后最小化和恢复主窗口。我正在使用类似下面的类,但它不是我想要的,因为当窗口恢复时它的大小无效。我试图修改宽度和高度,但它不起作用。WPF UI在最小化和恢复后调整大小
public class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ConfigureWindow();
}
public void Show()
{
base.Show();
UpdateWindowPositionAndSize();
base.WindowState = WindowState.Normal;
base.Show();
}
private void ConfigureWindow()
{
base.ShowActivated = true;
this.Focusable = true;
if (base.IsActive == false)
{
base.Activate();
}
if (base.IsFocused == false)
{
base.Focus();
}
base.WindowState = WindowState.Minimized;
}
private void UpdateWindowPositionAndSize()
{
this.Top = (SystemParameters.WorkArea.Height - this.Height)/2;
this.Left = (SystemParameters.WorkArea.Width - this.Width)/2;
}
}
我在做什么错了?还有另一种方式来获得重点?对不起,如果问题太新。
更新:
具体是什么需要?
我需要我的WPF应用程序出现在焦点和激活后启动它。
为什么呢?
由于它将在Windows(7,8.1和10)用户从文件上下文菜单(即外壳扩展名)中明确单击子菜单后启动。这是'为什么'我的客户想要出现在屏幕前并聚焦。
什么时候?
实例化后的窗口。
怎么样?
那么,我做了一些研究,我发现了几种方法来做到这一点。我尝试过的方法之一是最小化窗口并将其还原。其他人喜欢使用函数SwitchToThisWindow或setforegroundwindow,但我想知道是否有更好的选择。
什么时候我已经试过最小化和还原窗口发生? (正确的尺寸)
嗯,这种方式让我专注于主窗口,但它改变了宽度和高度。默认情况下,我将它们定义为300(w)和300(h),但是在将窗口状态更改为正常后,这些值将变为400(w)和350(h)。
如果我不做任何事情,它马上就有重点?
...没有...
UPDATE2:
我选择在接下来的环节中使用的方法: https://www.roelvanlisdonk.nl/2014/09/05/reliable-bring-external-process-window-to-foreground-without-c/
*“为了获得焦点,我需要最小化和恢复主窗口”* ...为什么? – Jim
我知道它很脏:c,但是我的客户想要在启动应用程序后获得焦点,如果有更优雅的方式,请让我知道 – Henry
您的主窗体类不是“MainWindow”吗?详细说明什么是特定需求,为什么,何时,如何......因为至少对我而言这是不清楚的。什么是问题? ...表单打开时没有重点? .... – Jim