2008-12-06 6 views
1

J'utilise le code ci-dessous pour enregistrer et restaurer la position et la taille de la fenêtre lors du redémarrage.Dérive lors de la restauration de l'emplacement et de la taille de la fenêtre dans WPF

J'observe une dérive de vers le haut de 28 pixels chaque fois que j'exécute ce code! Est-ce que je lis les mauvaises valeurs, ou est-ce que je les restaure incorrectement? D'où vient le numéro 28 (taille du chrome?) (Et comment le comptabiliserais-je par programmation, plutôt qu'un nombre fixe dans le code)?

Voici mon code:

public partial class MainStudioWindowControl : RibbonWindow 
{ 
    public MainStudioWindowControl() 
    { 
     App.MainWindowOwner = this; 
     this.Loaded += new System.Windows.RoutedEventHandler(MainStudioWindowControl_Loaded); 
    } 

    void MainStudioWindowControl_Loaded(object sender, System.Windows.RoutedEventArgs e) 
    { 
     System.Windows.Window mainWindow = System.Windows.Application.Current.MainWindow; 
     mainWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual; 
     if (Studio.Properties.Settings.Default.Width > 0) 
     { 
      mainWindow.Left = Studio.Properties.Settings.Default.Left; 
      mainWindow.Top = Studio.Properties.Settings.Default.Top; 
      mainWindow.Width = Studio.Properties.Settings.Default.Width; 
      mainWindow.Height = Studio.Properties.Settings.Default.Height; 
     } 
     Debug.WriteLine(string.Format("Loading: Top = {0}", this.Top)); 
    } 

    protected override void OnClosing(System.ComponentModel.CancelEventArgs e) 
    { 
     base.OnClosing(e); 
     System.Windows.Window mainWindow = System.Windows.Application.Current.MainWindow; 
     Studio.Properties.Settings.Default.Left = mainWindow.Left; 
     Studio.Properties.Settings.Default.Top = mainWindow.Top; 
     Studio.Properties.Settings.Default.Width = mainWindow.Width; 
     Studio.Properties.Settings.Default.Height = mainWindow.Height; 
     Studio.Properties.Settings.Default.Save(); 
     Debug.WriteLine(string.Format("Saving: Settings.Top = {0}", Studio.Properties.Settings.Default.Top)); 
    } 
} 

Répondre

3

Essayez ceci:

1) Dériver votre classe de la fenêtre normale, pas RibbonWindow - si cela résout le problème, il est une question de RibbonWindow.

2) Utilisez des valeurs codées en dur pour définir les mesures dans le gestionnaire Loaded - si cela le résout, le problème a quelque chose à voir avec les paramètres.

Avec ces deux changements, cela a bien fonctionné pour moi. La fenêtre est apparue là où elle devrait à chaque fois.

+0

Oui, je parie que RibbonWindow ne prend pas en compte la barre de titre Windows lorsque vous définissez la propriété Top, mais le fait quand vous l'obtenez. –

+0

Oh chéri, l'Infragistics XamRibbonWindow a exactement le même problème. –

Questions connexes