将WindowStartupLocation设置为主窗口的Button1的Margin.Top

时间:2011-11-08 12:38:54

标签: c# wpf

我正在开发一个项目,每当用户将鼠标悬停在主窗口上的按钮上时,我必须添加一个小预览窗格和一个关于框。

对于考试:我有一个窗口 - preview.xaml,我的主窗口名为MainWindow.xaml。

如何将预览窗口底部设置为显示在MainWindow上button1的顶部?

我没有运气就试过这样的事情:

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

我希望我的谣言有任何意义......

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

您需要将LeftTop窗口属性设置为屏幕坐标,按钮边距在此处无效。使用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();
    }

答案 1 :(得分:0)

你必须反过来这样做。在您打开预览窗口的MainWindow中,执行以下操作:

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

如果你想重用那个窗口,你必须做一些逻辑。