2010-05-04 6 views
1

Je tente d'enregistrer la position d'une boîte de dialogue personnalisée dans le registre des utilisateurs, de sorte que lorsqu'ils rechargent la même boîte de dialogue, elle apparaît au même emplacement que celui précédemment déplacé ou redimensionné. Je sauvegarde la position de la fenêtre X position Y Largeur et hauteur. Tout fonctionne correctement sauf lorsque le dialogue est réduit. Si la boîte de dialogue est réduite et que l'utilisateur clique avec le bouton droit de la souris sur la représentation des boîtes de dialogue dans la barre des tâches (Windows 7), il peut cliquer sur "fermer cette fenêtre". Curieusement, le numéro -32030 est enregistré dans le registre comme les positions X et Y, mais la largeur et la hauteur sont enregistrées correctement. Toute idée d'où ce numéro vient et que faire dans cette situation thxPosition de la fenêtre réduite dans WPF

Répondre

6

Vous voulez quelque chose comme ceci lorsque vous enregistrez la position de la fenêtre:

if (this.WindowState == WindowState.Normal) 
{ 
    Properties.Settings.Default.Top = Top; 
    Properties.Settings.Default.Left = Left; 
    Properties.Settings.Default.Height = Height; 
    Properties.Settings.Default.Width = Width; 
} 
else 
{ 
    Properties.Settings.Default.Top = RestoreBounds.Top; 
    Properties.Settings.Default.Left = RestoreBounds.Left; 
    Properties.Settings.Default.Height = RestoreBounds.Height; 
    Properties.Settings.Default.Width = RestoreBounds.Width; 
    // Check for WindowState.Maximized or WindowState.Minimized if you 
    // need to do something different for each case (e.g. store if application 
    // was Maximized 
} 

Le bit important est le RestoreBounds que vous avez besoin lorsque la fenêtre est agrandie ou réduite au minimum. Le code peut probablement être refactorisé pour le rendre plus efficace, mais vous avez l'idée.

3

Je suppose que vous mettez à jour la position de la fenêtre lorsque la fenêtre est fermée? Il y a quelques solutions si c'est le cas.

1) Enregistrer la position de la fenêtre sur un événement différent, comme lorsque la fenêtre est redimensionnée ou déplacée. 2) Vérifiez si la fenêtre est minimisée avant d'enregistrer les positions X et Y.

Exemple:

switch (this.WindowState) 
{ 
    case WindowState.Maximized: 
     // don't update the X,Y 
     break; 
    case WindowState.Minimized: 
     // don't update the X,Y 
     break; 
    case WindowState.Normal: 
     // DO update the X,Y 
     break; 
} 
Questions connexes