Установите для WindowStartupLocation значение Margin.Top для Button1 основного окна. - PullRequest
0 голосов
/ 08 ноября 2011

Я работаю над проектом, в котором мне нужно добавить небольшую панель предварительного просмотра и поле about, когда пользователь наводит курсор на кнопки в главном окне.

Для проверки: у меня есть окно - preview.xaml, а главное окно называется MainWindow.xaml.

Как настроить нижнюю часть окон предварительного просмотра, чтобы она отображалась в верхней части button1 главного окна?

Я попробовал что-то подобное без удачи:

public preview()
{
   InitializeComponent();
   this.WindowStartupLocation = WindowStartupLocation.Manual;
   Top = mainWindow.button1.Margin.Top;
}

Я надеюсь, что мои разговоры имеют какой-то смысл ...

Любая помощь очень ценится!

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Вам необходимо установить свойства окна Left и Top для отображения координат экрана, поля кнопок здесь не помогут.Используйте функцию PointToScreen для получения экранных координат ваших кнопок:

    private void button1_MouseEnter(object sender, MouseEventArgs e)
    {
        var control = ((FrameworkElement)sender);
        // get screen coordinates of (0,0) point of button
        var location = control.PointToScreen(new Point(0, 0));
        var w = new preview()
        {
            WindowStartupLocation = System.Windows.WindowStartupLocation.Manual,
            ShowActivated = false,
        };
        w.Top = location.Y - w.Height;
        w.Left = location.X + (control.ActualWidth - w.Width) / 2;
        w.Show();
    }
0 голосов
/ 08 ноября 2011

Вы должны сделать это наоборот. В главном окне, где вы открываете окно предварительного просмотра, сделайте что-то вроде этого:

PreviewWindow preview = new PreviewWindow
{
     Owner = this,
     WindowStartupLocation = WindowStartupLocation.Manual,
     Top = button1.Margin.Top
};
preview.Show();

Если вы хотите повторно использовать это окно, вам нужно немного поработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...