web-dev-qa-db-fra.com

Définition de la taille de la fenêtre sur le bureau pour une application Windows 10 UWP

Je viens de commencer à apprendre le développement d'applications UWP sur Windows 10 Pro à l'aide de Visual Studio 2015 Community Edition. J'ai essayé de modifier version C # de l'exemple officiel "Hello, World!" en définissant les attributs Width et Height de la balise Page dans MainPage.xaml.

Fait intéressant, lorsque je lance l'application, sa taille sera différente. De plus, si je redimensionne sa fenêtre puis la redémarre, l'application semble se souvenir de sa taille de fenêtre précédente.

Est-il possible de forcer une application UWP à avoir une taille de fenêtre prédéfinie, au moins sur les PC de bureau?

29
kol

Essayez de définir PreferredLaunchViewSize dans votre MainPageconstructeur comme ceci:

public MainPage()
{
    this.InitializeComponent();

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

Comme @kol l'a également souligné, si vous souhaitez une taille inférieure à la valeur par défaut 500x32, vous devrez le réinitialiser manuellement:

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

Vous n'avez pas vraiment de contrôle sur la taille de la fenêtre, et même si vous essayez de la redimensionner, elle peut échouer. J'ai posé la même question sur les forums MSDN et j'ai obtenu la réponse ici:

application DirectX universelle Windows 1

BTW, voici la solution dans votre gestionnaire d'événements "OnLaunched" ou dans votre gestionnaire d'événements "OnActivated", trouvez:

Window.Current.Activate();

Et remplacez-le par:

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);

Il est préférable de placer ce code dans le gestionnaire d'événements "OnActivated ()" car il définira votre taille définie au démarrage de l'application et lorsqu'elle deviendra active après toute interruption.

Dans le calcul de la "taille souhaitée", 800 correspond à la largeur et 600 à la hauteur. Ce calcul est nécessaire, car la taille est en DPI, vous devez donc le convertir des pixels en DPI.

Gardez également à l'esprit que la taille ne peut pas être inférieure à "320x200".

10
Rafal Rebisz

Pour le tout premier lancement d'application, le ApplicationView.PreferredLaunchWindowingMode est réglé sur ApplicationViewWindowingMode.Auto indépendamment de ce que vous définissez dans votre code.

Cependant, à partir de cette question sur MSDN , il peut y avoir un moyen de surmonter cela. L'une des réponses donne un moyen de définir cette toute première taille de lancement (en revenant à Auto après cela).

Si votre objectif est de lancer une seule fois à un PreferredLaunchViewSize, vous pouvez utiliser cette solution grossière (à vous de choisir une meilleure implémentation avec votre style de codage!: 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. Je n'ai pas testé cela.

3
binaryfunt