Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最小化和还原后重新调整WPF UI大小_C#_Wpf_Xaml - Fatal编程技术网

C# 最小化和还原后重新调整WPF UI大小

C# 最小化和还原后重新调整WPF UI大小,c#,wpf,xaml,C#,Wpf,Xaml,我有一个WPF应用程序。在实例化主窗口后,我需要最小化并恢复它以获得焦点。我正在使用下面的类,但它不是我想要的,因为当窗口恢复时,它的大小无效。我试图修改宽度和高度,但不起作用 public class MainWindow : Window { public MainWindow() { InitializeComponent(); ConfigureWindow(); } public void Show() {

我有一个WPF应用程序。在实例化主窗口后,我需要最小化并恢复它以获得焦点。我正在使用下面的类,但它不是我想要的,因为当窗口恢复时,它的大小无效。我试图修改宽度和高度,但不起作用

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
您的主窗体类?详细说明具体需要是什么,为什么,何时,如何。。。因为至少对我来说这还不清楚。问题是什么。。。当窗体打开时,它没有焦点。。。。请在此上下文中定义正确的大小是的,当窗体打开时,它没有焦点。。。(我已经更新了帖子,谢谢你的建议)