2013-01-06 1 views
2

J'ai remarqué que si je déplace ma fenêtre WPF à travers le code, je ne verrai que les changements lorsque la fenêtre se rafraîchit (si je la minimise puis la maximise).
Est-il possible de rafraîchir l'interface graphique d'un WPF à la demande?rafraîchir une fenêtre WPF à la demande

EDIT: Je suis en train de faire en sorte que cette fenêtre suive une autre fenêtre.

Je suis accrochage à l'autre des événements de fenêtre:

m_wndParent = parent; 
    this.Owner = m_wndParent; 
    m_wndParent.SizeChanged += ParentSizeChanged; 
    m_wndParent.LayoutUpdated += ParentLocationChanged; 

puis-je changer la position de ma fenêtre:

private void ParentLocationChanged(object sender, EventArgs e) 
     { 
      Window parent = sender as Window; 
      this.Top = parent.Top; 
      this.Left = parent.Left; 
      this.UpdateLayout(); 
     } 
+0

Comment bougez-vous votre fenêtre? Montrez votre code s'il vous plaît. – Clemens

+0

Je change ses propriétés "Left" et "Top". – Idov

+0

Cela devrait fonctionner sans "rafraîchissement" supplémentaire. Où et quand définissez-vous ces propriétés? Encore une fois, montrez du code. – Clemens

Répondre

1

Vous devez ajouter votre gestionnaire ParentLocationChanged à l'événement LocationChanged au lieu de LayoutUpdated (ce qui sert un objectif complètement différent).

m_wndParent.LocationChanged += ParentLocationChanged; 

private void ParentLocationChanged(object sender, EventArgs e) 
{ 
    var parent = sender as Window; 
    Top = parent.Top; 
    Left = parent.Left; 
} 
0

Vous devez brancher parent.LocationChanged, puis appeler InvalidateVisual. Voir MSDN for more details.

+0

InvalidateVisual n'est pas nécessaire. Il s'agit simplement de définir les propriétés Left et Top. – Clemens

+1

Il a demandé "Est-il possible de rafraîchir l'interface graphique d'un WPF sur demande?" Si oui, il a besoin d'InvalidateVisual. S'il veut simplement définir la position de sorte que la fenêtre suive son parent, seul Left/Top est nécessaire. – Matthias

+0

Il a édité la question. De toute évidence, il veut juste déplacer la fenêtre. Il est important ici de faire la distinction entre l'actualisation (c'est-à-dire UpdateLayout ou InvalidateVisual) et le déplacement de la fenêtre du bureau. Ces deux sont complètement indépendants et vous devriez au moins le signaler dans votre réponse. – Clemens

Questions connexes