gpt4 book ai didi

c# - 最小化和恢复后 WPF UI 调整大小

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:11 25 4
gpt4 key购买 nike

我有一个 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)用户在明确单击文件上下文菜单中的子菜单(即 Shell 扩展)后启动。这就是我的客户希望它出现在屏幕前面并集中注意力的“原因”。

什么时候?

实例化窗口后。

怎么做?

好吧,我做了一些研究,发现了几种方法来做到这一点。我尝试过的一种方法是最小化窗口并恢复它。其他人喜欢使用函数 SwitchToThisWindow 或 setforegroundwindow,但我想知道是否有更好的选择。

当我尝试最小化和恢复窗口时会发生什么? (正确尺寸)

好吧,这种方式让我专注于主窗口,但它改变了宽度和高度。默认情况下,我将它们定义为 300 (w) 和 300 (h),但在将 Windows 状态更改为正常后,这些值更改为 400 (w) 和 350 (h)。

如果我什么都不做,它会立即获得焦点吗?

……没有……

更新 2:

我选择下一个链接中使用的方法: https://www.roelvanlisdonk.nl/2014/09/05/reliable-bring-external-process-window-to-foreground-without-c/

最佳答案

我不太确定你的问题是什么,但这也许能帮到你。

1.) 从 App.xaml 中删除 StartupUri="MainWindow.xaml"

2.) 添加Startup="Application_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;
}
}

所以基本上您只需修改Window 直到all 完成。无需先显示它,更改其位置,然后再将其重新打开 - 如果我的“用例”正确。

因为对我来说,您似乎在隐藏窗口以进行“定位”。但我认为最好在 Initializing 时进行。


到目前为止,只是对您的代码的简短评论:

ConfigureWindow() 仅执行最小化。您的其余代码毫无用处,因为窗口在最小化时显然会失去焦点。

我建议不要创建名称已经存在的方法。 enter image description here

这只会导致困惑。

如果您在使用 WindowState = WindowState.Minimized; 时遇到问题,您可以尝试使用 Hide()Activate()

默认情况下,当调用 Window.Show(); 时,窗口将具有焦点。在这里检查 details .

此外,在设置 WindowState = WindowState.Minimized; 之后,您不需要再次调用 base.Show(); - 窗口已经显示。 WindowState = WindowState.Normal; 应该可以完成这项工作。

关于c# - 最小化和恢复后 WPF UI 调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com