webentwicklung-frage-antwort-db.com.de

Festlegen der Fenstergröße auf dem Desktop für eine Windows 10-UWP-App

Ich habe gerade angefangen, die Entwicklung von UWP-Apps unter Windows 10 Pro mit Visual Studio 2015 Community Edition zu lernen. Ich habe versucht, die C # -Version des offiziellen "Hello, World!" - Beispiels zu ändern, indem ich die Attribute Width und Height des Page-Tags in MainPage.xaml festgelegt habe.

Interessanterweise unterscheidet sich die Größe, wenn ich die App starte. Wenn ich die Größe des Fensters verändere und es dann neu starte, scheint sich die App an die vorherige Fenstergröße zu erinnern.

Ist es möglich, eine UWP-App zu zwingen, zumindest auf Desktop-PCs eine vordefinierte Fenstergröße zu haben?

29
kol

Versuchen Sie, PreferredLaunchViewSize in den Konstruktor Ihres MainPage wie folgt zu setzen:

public MainPage()
{
    this.InitializeComponent();

    ApplicationView.PreferredLaunchViewSize = new Size(480, 800);
    ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
}

Wenn Sie eine kleinere Größe als die Standardgröße 500x320 haben möchten, müssen Sie diese wie folgt manuell zurücksetzen:

ApplicationView.GetForCurrentView().SetPreferredMinSize(new Size(200, 100));
60
Justin XL

Sie können die Fenstergröße nicht wirklich steuern, und selbst wenn Sie versuchen, die Größe zu ändern, kann dies fehlschlagen. Ich habe die gleiche Frage in MSDN-Foren gestellt und die Antwort hier bekommen:

Windows 10 Universal DirectX-Anwendung

Übrigens, hier ist die Lösung in Ihrem Event-Handler "OnLaunched" oder in Ihrem Event-Handler "OnActivated" zu finden:

Window.Current.Activate();

Und ersetzen Sie es durch:

float DPI = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().LogicalDpi;

Windows.UI.ViewManagement.ApplicationView.PreferredLaunchWindowingMode = Windows.UI.ViewManagement.ApplicationViewWindowingMode.PreferredLaunchViewSize;

var desiredSize = new Windows.Foundation.Size(((float)800 * 96.0f / DPI), ((float)600 * 96.0f / DPI));

Windows.UI.ViewManagement.ApplicationView.PreferredLaunchViewSize = desiredSize;

Window.Current.Activate();

bool result = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().TryResizeView(desiredSize);

Es ist besser, wenn Sie diesen Code in die Ereignisbehandlungsroutine "OnActivated ()" einfügen, da hierdurch Ihre definierte Größe festgelegt wird, wenn die App gestartet wird und wenn sie nach Unterbrechungen aktiv wird.

Bei der Berechnung "Gewünschte Größe" ist 800 die Breite und 600 die Höhe. Diese Berechnung ist erforderlich, da die Größe in DPI angegeben ist und Sie sie von Pixel in DPI konvertieren müssen.

Beachten Sie auch, dass die Größe nicht kleiner als "320x200" sein kann.

10
Rafal Rebisz

Für den allerersten App-Start ist der ApplicationView.PreferredLaunchWindowingMode ist eingestellt auf ApplicationViewWindowingMode.Auto unabhängig davon, was Sie in Ihrem Code eingestellt haben.

Ab diese Frage auf MSDN kann dies möglicherweise behoben werden. Eine der Antworten bietet die Möglichkeit, die erste Startgröße festzulegen (danach wird wieder Auto angezeigt).

Wenn Ihr Ziel darin besteht, nur einmal mit einem PreferredLaunchViewSize zu starten, können Sie diese unhöfliche Lösung verwenden (für eine bessere Implementierung mit Ihrem Codierungsstil!: P).

public MainPage()
{
    this.InitializeComponent();

    var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        if (localSettings.Values["launchedWithPrefSize"] == null)
        {
            // first app launch only!!
            ApplicationView.PreferredLaunchViewSize = new Size(100, 100);
            ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;
            localSettings.Values["launchedWithPrefSize"] = true;
        }
        // resetting the auto-resizing -> next launch the system will control the PreferredLaunchViewSize
        ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Auto;
    }
}

P.S. Ich habe das nicht getestet.

3
binaryfunt