C# 最小化和还原后重新调整WPF UI大小
我有一个WPF应用程序。在实例化主窗口后,我需要最小化并恢复它以获得焦点。我正在使用下面的类,但它不是我想要的,因为当窗口恢复时,它的大小无效。我试图修改宽度和高度,但不起作用C# 最小化和还原后重新调整WPF UI大小,c#,wpf,xaml,C#,Wpf,Xaml,我有一个WPF应用程序。在实例化主窗口后,我需要最小化并恢复它以获得焦点。我正在使用下面的类,但它不是我想要的,因为当窗口恢复时,它的大小无效。我试图修改宽度和高度,但不起作用 public class MainWindow : Window { public MainWindow() { InitializeComponent(); ConfigureWindow(); } public void Show() {
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)用户在从文件上下文菜单(意味着外壳扩展名)显式单击子菜单后启动。这就是我的客户想要的出现在屏幕前面并聚焦的“原因”
什么时候
在实例化窗口之后
怎么做
嗯,我做了一些研究,发现了几种方法。我尝试过的方法之一是最小化窗口并恢复它。还有其他人喜欢使用函数切换到此窗口或setforegroundwindow,但我想知道是否有更好的选项
当我尝试最小化和恢复窗口时会发生什么?(正确尺寸)
好的,这种方式让我聚焦在主窗口上,但它改变了宽度和高度。默认情况下,我在300(w)和300(h)上定义它们,但将windows状态更改为正常后,这些值将更改为400(w)和350(h)
如果我什么都不做,它马上就有焦点了
。。。不
更新2:
我选择下一个链接中使用的方法:
我不太确定您的问题是什么,但这可能会有所帮助 1.)从
App.xaml
中删除StartupUri=“MainWindow.xaml”
2.)添加Startup=“应用程序启动”
您的App.xaml.cs
应该如下所示:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
//Create new Instance of MainWindow
MainWindow mainWindow = new MainWindow();
//Set Properties of that Window
UpdateWindowPositionAndSize(mainWindow);
//Show it !
MainWindow = mainWindow; //This is the Application.MainWindow Property - not needed
mainWindow.ShowDialog();
}
private void UpdateWindowPositionAndSize(MainWindow mainWindow)
{
//Do your modifications here
mainWindow.Top = (SystemParameters.WorkArea.Height - mainWindow.Height) / 2;
mainWindow.Left = (SystemParameters.WorkArea.Width - mainWindow.Width) / 2;
}
}
所以基本上你只需修改你的窗口
,直到全部完成。
没有必要先展示它,改变它的位置,然后再把它带回来——如果我对了你的“用例”
因为在我看来,你是在隐藏窗口来进行“定位”。
但我认为最好在初始化时执行
到目前为止,只需对您的代码做一个简短的评论:
ConfigureWindow()
仅在执行最小化
。
代码的其余部分是无用的,因为当窗口最小化时,它显然会失去焦点
我建议不要使用已经存在的名称创建方法。
这只会导致核聚变
如果您对WindowState=WindowState.Minimized有问题
您可以尝试Hide()
和Activate()
默认情况下,在调用Window.Show()时代码>窗口将具有焦点。在这里查一查
同样在设置WindowState=WindowState.Minimized之后
您不需要调用base.Show()代码>再次-窗口已显示<代码>窗口状态=窗口状态。正常代码>应该完成这项工作。“我需要在实例化主窗口后最小化并恢复它,以获得焦点”。。。为什么?我知道它很脏:c,但我的客户希望在启动应用程序后获得焦点,如果有更优雅的方式,请告诉我是不是MainWindow
您的主窗体类?详细说明具体需要是什么,为什么,何时,如何。。。因为至少对我来说这还不清楚。问题是什么。。。当窗体打开时,它没有焦点。。。。请在此上下文中定义正确的大小是的,当窗体打开时,它没有焦点。。。(我已经更新了帖子,谢谢你的建议)