Domanda

Secondo la documentazione MSDN per la WindowStartupLocation proprietà :

  

Impostazione CenterScreen provoca una finestra da posizionare al centro dello schermo che contiene il cursore del mouse.

Anche se il documento MSDN per il CenterScreen campo stesso lo definisce un po 'meno chiaramente:

  

La posizione di avvio di una finestra è il centro dello schermo sul quale si apre.

Un semplice test mostra questo funziona come dovrebbe:

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

Se si prova questo su un sistema a doppio monitor, si può vedere che la nuova finestra sarà centrato sullo schermo in cui il cursore del mouse è quando si fa clic sul pulsante. Questo è esattamente come dovrebbe di lavoro.

Tuttavia , se si tenta di impostare la finestra di massimizzare prima di mostrare che, la nuova finestra ci permetterà di ottimizzare solo sul display da cui è stato lanciato l'applicazione. Modificare il gestore di eventi Button_Click al seguente per vedere quello che voglio dire:

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

Ora la finestra ci permetterà di ottimizzare solo sulla schermata da cui viene lanciato l'applicazione, non importa dove il cursore del mouse è quando si fa clic sul pulsante. Se si imposta lo stato della finestra per massimizzata dopo si mostra, CenterScreen funziona correttamente. Ciò equivale a all'utente massimizzare la finestra. Per esempio:

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

Il problema qui, naturalmente, è che massimizzando la finestra dopo che mostra ci vuole molto più tempo e in un app come la mia, le esigenze delle finestre di pop in posizione immediatamente.

Qualcuno sa di una soluzione?

È stato utile?

Soluzione 2

ho chiesto la stessa domanda sulla WPF Forum MSDN e ottenuto una risposta con questa soluzione impressionante :

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

Ho anche presentato una bug Report su questo problema a Microsoft che stanno attualmente rivedendo.

Altri suggerimenti

E 'possibile impostare in XAML

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

È necessario impostare SizeToContent per Manuale . Vedi altre risposte per i dettagli.

Assicurarsi che SizeToContent è impostato su SizeToContent.Manual, altrimenti non funzionerà.

A partire dalla finestra di ingrandimento può essere ottenuto mediante la seguente aggiunta al markup XAML.

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

La proprietà WindowState è subordinato al SizeToContent , il che significa che è necessario impostare quest'ultimo Manuale (se si desidera che la massimizzazione del reale) . È anche possibile impostare SizeToContent per Altezza o Larghezza (se si vuole massimizzare la finestra in una dimensione, mentre obbedendo le dimensioni calcolate in base alla dimensioni controlli nell'altro).

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

È possibile che questo farà la durata della finestra da cima a fondo, ma non necessariamente da sinistra a bordo destro. E 'equivale a premere la combinazione di tasti Win + Maiusc + up .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top