2010-06-25 16 views
38

Gemäß der MSDN Dokumentation für die WindowStartupLocation Property:Wie kann ich ein WPF-Fenster mit dem Mauszeiger auf dem Bildschirm maximieren?

Mittenschirm Einstellung bewirkt, dass ein Fenster in der Mitte des Bildschirms positioniert werden, dass das Maus-Cursor enthält.

Obwohl die MSDN doc für die CenterScreen Field selbst definiert sie etwas weniger klar als:

Der Start Position eines Fensters der Mitte des Bildschirms, auf dem sie geöffnet wird.

Ein einfacher Test zeigt dies funktioniert, wie es sollte:

MainWindow.xaml

<Window x:Class="CenterScreenTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Button Click="button_Click">Open Window</Button> 
</Window> 

MainWindow.xaml.cs

using System.Windows; 

namespace CenterScreenTest 
{ 
    public partial class MainWindow 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     void button_Click(object sender, RoutedEventArgs e) 
     { 
      Window window = new Window(); 
      window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
      window.Show(); 
     } 
    } 
} 

Wenn Sie diese auf einem Dual testen Monitor-System, können Sie sehen, dass das neue Fenster auf dem Bildschirm zentriert wird, wo der Mauszeiger ist, wenn Sie auf die Schaltfläche klicken. Genau so sollte es funktionieren: sollte funktionieren.

Jedoch, wenn Sie versuchen, das Fenster zu maximieren, bevor Sie es zeigen, maximiert das neue Fenster nur auf dem Bildschirm, von dem Sie die Anwendung gestartet. Ändern Sie den Button_Click Ereignishandler Folgenden zu sehen, was ich meine:

void button_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = new Window(); 
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
    window.WindowState = WindowState.Maximized; 
    window.Show(); 
} 

Jetzt wird das Fenster nur auf dem Bildschirm maximieren, aus dem die Anwendung gestartet wird, unabhängig davon, wo sich der Mauszeiger befindet, wenn Sie auf die Schaltfläche klicken . Wenn Sie den Fensterstatus auf maximiert nach zeigen Sie es, CenterScreen funktioniert ordnungsgemäß. Dies entspricht dem Benutzer, der das Fenster maximiert. Zum Beispiel:

void button_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = new Window(); 
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
    window.Show(); 
    window.WindowState = WindowState.Maximized; 
} 

Das Problem hier ist natürlich, dass das Fenster maximiert, nachdem es dauert viel länger, und in einer App wie Mine zeigte, muss das Fenster sofort an Ort und Stelle, um Pop.

Wer kennt eine Lösung?

Antwort

36

fragte ich die gleiche Frage auf der MSDN WPF Forum und bekam eine Antwort mit this awesome workaround:

void button_Click(object sender, RoutedEventArgs e) 
{ 
    Window window = new Window(); 
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
    window.SourceInitialized += (s, a) => window.WindowState = WindowState.Maximized; 
    window.Show(); 
} 

Ich habe auch eine bug report über dieses Problem an Microsoft übermittelt, dass sie zur Zeit der Überprüfung sind.

5

Stellen Sie sicher, dass SizeToContent auf SizeToContent.Manual festgelegt ist, andernfalls wird es nicht funktionieren.

+0

Sie müssen tatsächlich ** beide ** diese Sache tun. Bitte sehen Sie sich meine Antwort an. +1 sowieso. –

69

Sie können es in XAML festlegen

<Window Height="300" Width="300" WindowState="Maximized"> 
</Window> 

Sie benötigen SizeToContent-Handbuch einzustellen. Siehe andere Antworten für Details.

3

Starten mit dem Fenster maximieren kann durch die folgende Ergänzung der XAML-Markup erreicht werden.

<Window Height="300" Width="300" 
    WindowState="Maximized" 
    SizeToContent="Manual"> 
</Window> 

Die Eigenschaft Window untergeordnet ist SizeToContent, was bedeutet, dass Sie diese Handbuch (wenn Sie die tatsächliche Maximierung) einstellen müssen. Sie können auch SizeToContent bis Höhe oder Breite (wenn Sie das Fenster in einer Dimension maximieren möchten, während die Größe basierend auf den Größen der Steuerelemente in der anderen gehorchen).

<Window Height="300" Width="300" 
    WindowState="Maximized" 
    SizeToContent="Width"> 
</Window> 

Das obige wird das Fenster von oben nach unten überspannen, aber nicht unbedingt von der linken zur rechten Kante. Dies entspricht dem Drücken der Tastenkombination Win + Shift + Nach oben.

Verwandte Themen