Dérive lors de la restauration de l'emplacement et de la taille de la fenêtre dans WPF

StackOverflow https://stackoverflow.com/questions/346309

  •  19-08-2019
  •  | 
  •  

Question

J'utilise le code ci-dessous pour enregistrer et restaurer la position et la taille de la fenêtre au redémarrage.

J'observe une dérive ascendante 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 de manière incorrecte? D'où vient le nombre 28 (taille du chrome?) (Et comment pourrais-je en rendre compte par programme plutôt que par 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));
    }
}
Était-ce utile?

La solution

Essayez ceci:

1) Dérivez votre classe de la fenêtre normale, pas de RibbonWindow - si cela résout le problème, il s’agit d’un problème de RibbonWindow.

2) Utilisez des valeurs codées en dur pour définir les mesures dans le gestionnaire Loaded - si cela résout le problème, 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top