[英]How to ensure C# UWP app is full screen on the FIRST launch after the installation?
[英]How to ensure UWP app is always full screen on launch?
有沒有辦法(C# 或 XAML)我可以最大化 UWP 應用程序 window 即使我之前在桌面上調整大小並關閉它?
我已經嘗試使用ApplicationViewWindowingMode.FullScreen
但這會使應用程序 go 整個全屏並覆蓋 Windows 任務欄。
您可以使用ApplicationViewWindowingMode
另一個值PreferredLaunchViewSize
然后設置ApplicationView.PreferredLaunchViewSize
但關鍵是要找出大小將是什么。
從理論上講,你可以使用一個非常大的數字,窗口只會擴展到最大值。 但是,以有效像素計算屏幕尺寸可能更安全。
所以如果你只是在 InitializeComponent();
之前調用以下方法InitializeComponent();
在您的Page
面上,它應該在啟動時最大化窗口。
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;
}
}
如果您想在啟動時最大化您的應用程序,您可以使用以下內容:
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Maximized;
但是一定要把它放到你的頁面的加載事件中,否則它不會工作!
我的點數太少,無法直接評論。 以上都沒有調整為我的最大化視圖(或下面的單行 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 });
}
將以App.xaml.cs
添加到 App.xaml.cs 下的OnLaunched
事件為我完成了。
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;
注意:確保在以下行之前添加它
Window.Current.Activate();
如果您想在運行時全屏顯示 go,請使用以下行。
ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
我有一個襯墊,按照我預期的Justins代碼工作,但由於某種原因,當使用Justins答案時,我的窗口不會最大化......但后來我改變了一些確實使它最大化但我丟失了所有流暢的設計如丙烯酸和RevealHighlite ......
所以我想出了這個襯墊,讓我所有流利的設計原則都很開心:
ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
需要注意的事項:
我確實試過Justins的答案,我正在使用他的MaximizeWindowOnLoad()方法,我在initializeComponent()后直接調用了它;
完整概述:
public class()
{
this.InitializeComponent();
MaximizeWindowOnLoad();
}
private static void MaximizeWindowOnLoad()
{
ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.