WPF multi-moniteur de problème WindowState
J'ai essayé d'obtenir mon application WPF s'étendent sur plusieurs moniteurs pour un certain temps maintenant, et près d'avoir de travail.
Le problème semble survenir lorsque j'ai mis la ligne suivante:
win1.WindowState = WindowState.Maximized
Cela entraîne le span uniquement à l'écran principal.
Mon code est comme suit:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
Window1 win1 = new Window1();
win1.WindowStartupLocation = WindowStartupLocation.Manual;
win1.Width = 2560;
win1.Height = 1024;
win1.Left = 0;
win1.Top = 0;
win1.Topmost = true;
win1.Background = new SolidColorBrush(Colors.Black);
win1.WindowStyle = WindowStyle.None;
win1.Show();
win1.Focus();
}
}
Et à l'intérieur de la Fenêtre 1:
public partial class Window1 : Window
{
public Window1()
{
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
WindowState = WindowState.Maximized;
}
}
Que cet exemple fonctionne, mais la fenêtre n'est pas maximisée, et l'application les frontières sont encore visibles.
Y compris maximisé décélération Application_Startup rend le moniteur de maximiser le moniteur principal.
Pourquoi est-ce?
OriginalL'auteur Mig | 2009-12-23
Vous devez vous connecter pour publier un commentaire.
Note tout d'abord que la notion de "Agrandie", est lié à un seul moniteur, de sorte que vous ne peut pas vraiment avoir une fenêtre maximisée sur plusieurs moniteurs. Bien sûr, en WPF, vous pouvez créer votre propre cadre de la fenêtre et tirer tout ce que vous voulez dedans, donc si vous voulez, vous pouvez certainement faire de l'utilisateur pense que la fenêtre est agrandie et s'étendant sur plusieurs écrans.
Également noter qu'il est possible de s'étendre sur deux moniteurs avec une seule fenêtre rectangulaire dans les deux cas seulement:
Sinon, vous devrez utiliser deux fenêtres séparées pour couvrir l'ensemble des surfaces de deux moniteurs, ou l'utilisation d'une grande fenêtre qui comprend des zones qui ne sont pas couverts par un moniteur.
Ok, voici comment obtenir les informations dont vous aurez besoin à la position de votre fenêtre(s):
WPF lui-même ne fournit pas un moyen de demander à propos de votre moniteur comte, résolutions, ou de positions relatives. Heureusement qu'on peut appeler Win32 directement à l'aide de [DllImport]. Pour obtenir la résolution du moniteur et mises en page, juste:
Ici est l'idée de base:
Une fois que vous avez le moniteur de coordonnées, utilisez un algorithme de votre choix pour sélectionner le nombre de fenêtre(s) que vous souhaitez créer et ce que les coordonnées que vous souhaitez pour chacun. Puis créer les fenêtres à l'aide de taille explicite(s) et lieu(x).
Notez que vous voudrez probablement utiliser rcWork par opposition à rcMonitor de sorte que vous ne pas écraser le menu démarrer, etc.
Noter également que, dans de nombreux cas, certains de ces coordonnées retourné sera négatif, par exemple si le moniteur secondaire est à la gauche de l'écran principal. Ce n'est pas un problème: il suffit d'utiliser les coordonnées comme donné et votre windows apparaissent dans les bons endroits.
Oui, il est préférable d'utiliser le Système.De Windows.Les formulaires.L'écran de classe que d'appeler le natif de méthodes directement.
OriginalL'auteur Ray Burns
Si vous pouvez toujours supposer que votre moniteur secondaire est à la même résolution que le principal, vous pouvez mettre en place quelque chose comme ceci:
Ou:
OriginalL'auteur Brent