XAML 如何确保UWP应用程序在启动时始终全屏?

myzjeezk  于 2023-09-28  发布在  其他
关注(0)|答案(5)|浏览(161)

是否有一种方法(C#或XAML),即使在我之前在桌面上调整大小并关闭它之后,我也可以最大化UWP应用程序窗口?
我试过使用ApplicationViewWindowingMode.FullScreen,但这使应用程序进入整个全屏,并涵盖了Windows任务栏太。

4xrmg8kj

4xrmg8kj1#

您可以使用ApplicationViewWindowingMode中的另一个值PreferredLaunchViewSize,然后设置ApplicationView.PreferredLaunchViewSize,但关键是要找出 size 将是什么。
从理论上讲,你可以使用一个非常大的数字,窗口将扩展到它可能的最大值。然而,以 * 有效像素 * 计算屏幕尺寸可能更安全。
因此,如果您在主Page上调用以下方法 beforeInitializeComponent();,它应该在启动时最大化窗口。

private static void MaximizeWindowOnLoad()
{
    // Get how big the window can be in epx.
    var bounds = ApplicationView.GetForCurrentView().VisibleBounds;

    ApplicationView.PreferredLaunchViewSize = new Size(bounds.Width, bounds.Height);
    ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
}

请注意,即使在您卸载应用程序后,该应用程序也会以某种方式记住这些设置。如果你想改回默认行为(应用程序以之前的窗口大小启动),只需调用一次ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Auto;并删除所有代码。

更新

看起来在最新的Windows 10版本中,ApplicationView.GetForCurrentView().VisibleBounds不再以有效像素返回 * 完整 * 窗口大小。所以我们现在需要一种新的方法来计算它。
事实证明,这是非常简单的,因为DisplayInformation类也为我们提供了屏幕分辨率和比例因子。
以下是更新的代码-

public MainPage()
{
    MaximizeWindowOnLoad();

    InitializeComponent();

    void MaximizeWindowOnLoad()
    {
        var view = DisplayInformation.GetForCurrentView();

        // Get the screen resolution (APIs available from 14393 onward).
        var resolution = new Size(view.ScreenWidthInRawPixels, view.ScreenHeightInRawPixels);

        // Calculate the screen size in effective pixels. 
        // Note the height of the Windows Taskbar is ignored here since the app will only be given the maxium available size.
        var scale = view.ResolutionScale == ResolutionScale.Invalid ? 1 : view.RawPixelsPerViewPixel;
        var bounds = new Size(resolution.Width / scale, resolution.Height / scale);

        ApplicationView.PreferredLaunchViewSize = new Size(bounds.Width, bounds.Height);
        ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
    }
}
9gm1akwq

9gm1akwq2#

如果你想在启动时最大化你的应用,你可以使用以下方法:

ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Maximized;

但是一定要把它放到你的页面的加载事件中,否则它将无法工作!

pobjuy32

pobjuy323#

App.xaml.cs下的OnLaunched事件中添加以下行对我来说就是这样。

ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;

注意:请务必将其添加到以下行之前

Window.Current.Activate();

如果你想在运行时全屏显示,请使用下面这行。

ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
70gysomp

70gysomp4#

我的观点太少,无法直接评论。上面的方法都没有为我调整到最大化视图(或者下面的单行ApplicationViewWindowingMode.Maximized方法),但是我已经使用了一些答案来为我工作。然而,它仍然非常笨重。“DisplayInformation”中给出的屏幕大小太大,无法直接调整页面大小。尝试这样做没有工作,我不得不采取60小康的高度和宽度,让它返回'真',因此我有下面的废话位工作,也许它会帮助别人找到一个更好的答案。它进入页面/窗口加载事件。其他地方不需要添加任何东西。

private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        var view = ApplicationView.GetForCurrentView();
        var displayInfo = DisplayInformation.GetForCurrentView();
        double x = ActualWidth;
        double y = ActualHeight;
        bool answer = true;

        // Get the screen resolution (APIs available from 14393 onward).
        var resolution = new Size(displayInfo.ScreenWidthInRawPixels-60, displayInfo.ScreenHeightInRawPixels-60);

        answer = view.TryResizeView(resolution); //This should return true if the resize is successful
        if (answer)
        {
            x = displayInfo.ScreenWidthInRawPixels - 60;
            y = displayInfo.ScreenHeightInRawPixels - 60;
        }
        answer = true;
        while (answer == true)
        {
            x++;
            answer = view.TryResizeView(new Size { Width = x, Height = y });
        }
        x = x - 1;
        answer = true;
        while (answer == true)
        {
            y++;
            answer = view.TryResizeView(new Size { Width = x, Height = y });
        }
oo7oh9g9

oo7oh9g95#

我有这个一个班轮,工程作为我预期贾斯汀的代码,但由于某种原因,当使用贾斯汀的答案,我的窗口不会最大化.但后来我改变了一些东西,确实使它最大化,但我失去了我所有的流畅设计,如丙烯酸和RevealHighlite...
所以我想出了这个班轮,它保持了我所有的流畅设计原则:

ApplicationView.GetForCurrentView().TryEnterFullScreenMode();

注意事项:
我确实尝试了Justins的答案,我使用了他的MaximizeWindowOnLoad()方法,我在initializeComponent()之后直接调用了该方法;
完整概述:

public class()
        {     
            this.InitializeComponent();
            MaximizeWindowOnLoad();   
        }

private static void MaximizeWindowOnLoad()
        { 
           ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
        }

相关问题