Как узнать положение Silverlight ChildWindow при его закрытии - PullRequest
1 голос
/ 25 апреля 2010

Пожалуйста, помогите мне.

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
    ...
}

Ответы [ 2 ]

5 голосов
/ 28 апреля 2010

Упс, вы правы, попробуйте это:

Подключите окно к следующим событиям (я сделал это простым нажатием кнопки)

        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);
    }

НТН.

0 голосов
/ 25 апреля 2010

Вы можете узнать значения левого / верхнего значений в окне при условии, что вы подписаны на событие закрытия, а не закрыто

е:

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;
...