2010-04-25 63 views
1

请帮助我。如何在关闭它时知道Silverlight ChildWindow的位置

public myChildWindow() 
{ 
    InitializeComponent(); 

    // set left and top from saved values 
    Margin = new Thickness(70, 50, 0, 0); 
} 

private void ChildWindow_Closed(object sender, EventArgs e) 
{ 
    // How to know the position of the ChildWindow when you close it ? 
    // get left and top for save values 
    ... 
} 

回答

5

哎呀,你是对的,试试这个:

线的窗口下面的事件(我通过简单的按钮点击这样做)

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

现在你需要做的就是走ChildWindow PARTS DOM和发现,这将给你的位置ContentRoot。

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

好,有必要分析铬。 。 谢谢。 – Silver 2010-04-28 15:09:40

0

你可以找出左/从窗口顶部值提供您订阅的Closing事件并没有关闭

即:

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

然后获得位置值使用:

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

这是不行的(LeftProperty,TopProperty - 编译器错误 而 变种X = myChildWindow.GetValue(MarginProperty); 返回{0,0,0,0} – Silver 2010-04-25 12:54:26

相关问题