Je souhaite définir la largeur et la hauteur d'une Window
de manière dynamique en fonction de la largeur/hauteur maximale des écrans utilisateur. Comment puis-je déterminer cela par programmation?
Pour l'écran principal:
System.Windows.SystemParameters.PrimaryScreenWidth
System.Windows.SystemParameters.PrimaryScreenHeight
( Notez qu'il existe également d'autres propriétés liées à l'écran principal qui dépendent de divers facteurs, Full*
& Maximised*
)
Écran virtuel:
SystemParameters.VirtualScreenWidth
SystemParameters.VirtualScreenHeight
Si vous voulez les dimensions spécifiques du moniteur sur lequel votre programme est exécuté (si quelqu'un exécute plus d'un moniteur), vous pouvez également utiliser:
var helper = new WindowInteropHelper(this); //this being the wpf form
var currentScreen = Screen.FromHandle(helper.Handle);
Cela retournera un objet d'écran faisant référence au moniteur sur lequel le programme est exécuté. À partir de là, vous pouvez utiliser la propriété currentScreen.Bounds.Width
/Height
(pour la taille réelle) ou le currentScreen.WorkingArea.Width
/Height
(barre de tâches moins, etc.) en fonction de vos souhaits.
utiliser un objet d'écran
Screen.PrimaryScreen.Bounds.Width
Vous pouvez utiliser l'événement SizeChanged
SizeChanged="MyWindow_SizeChanged"
Puis dans votre gestionnaire d'événements,
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.MinWidth > 0 && this.MinHeight > 0)
{
double heightScaleFactor = e.NewSize.Height / this.MinHeight;
double widthScaleFactor = e.NewSize.Width / this.MinWidth;
mainGrid.LayoutTransform = new ScaleTransform(heightScaleFactor, widthScaleFactor);
}
}
où MainGrid
est un conteneur pour tout le contenu de MyWindow
.
Je ne pouvais utiliser aucune des solutions ci-dessus sous .NET 4.0.30319.42000 avec Windows 10 Enterprise lorsque je l'appelais depuis Ranorex Studio 8.0.1 + git.8a3e1a6f. J'ai donc utilisé la ligne.
using WinForms = System.Windows.Forms;
[…]
SetWindowPos(processes[0].MainWindowHandle,
0,
y,
x,
WinForms.SystemInformation.PrimaryMonitorSize.Width,
WinForms.SystemInformation.PrimaryMonitorSize.Height,
SWP.SHOWWINDOW);
Vous pouvez obtenir la hauteur et la largeur de l'écran:
int height = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height;
int width = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width;
Définissez ensuite les propriétés Height
et Width
de la fenêtre sur celles de l'initialisation.
this.Height = height;
this.Width = width;
Fonctionne pour obtenir la hauteur et la largeur de l'écran dans WinForms ou dans ASP .NET. Pas de problème, pas de problème, sauf que vous aurez besoin de référencer l'assembly System.Windows.Forms
dans votre projet s'il ne s'agit pas d'un projet WinForm.