2010-04-25 2 views

Répondre

5

Oops vous avez raison, essayez ceci:

Fil la fenêtre pour les événements suivants (je l'ai fait par le bouton simple clic)

 var childWindow = new ChildWindow();       
     childWindow.Closing += new EventHandler<CancelEventArgs>(OnChildWindowClosing);    
     childWindow.Show(); 

Maintenant ce que vous devez faire est de marcher le ChildWindow PIÈCES DOM et trouver le ContentRoot qui vous donnera la position.

static void OnChildWindowClosing(object sender, CancelEventArgs e) 
    { 
     var childWindow = (ChildWindow)sender;    
     var chrome = VisualTreeHelper.GetChild(childWindow, 0) as FrameworkElement; 
     if (chrome == null) return; 
     var contentRoot = chrome.FindName("ContentRoot") as FrameworkElement; 
     if (contentRoot == null || Application.Current == null || Application.Current.RootVisual == null) return; 
     var gt = contentRoot.TransformToVisual(Application.Current.RootVisual); 
     if (gt == null) return; 
     var windowPosition = gt.Transform(new Point(0, 0)); 
     MessageBox.Show("X:" + windowPosition.X + " Y:" + windowPosition.Y); 
    } 

HTH. ..

+0

Ok Il est nécessaire d'analyser le chrome. . Je vous remercie. – Silver

0

Vous pouvez trouver la Gauche/valeurs Haut de la fenêtre à condition que vous êtes abonné à l'événement de clôture et non Fermé

à savoir:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    LoginWindow loginWnd = new LoginWindow(); 
    loginWnd.Closing += new EventHandler(loginWnd_Closing); 
} 

ensuite pour obtenir les valeurs de position utilisent :

double x = GetValue(ChildWindow.LeftProperty) as double; 
double y = GetValue(ChildWindow.TopProperty) as double; 
+0

Cela fonctionne pas (LeftProperty, TopProperty - erreur du compilateur Et var x = myChildWindow.GetValue (MarginProperty); return {0,0,0,0} – Silver

Questions connexes