我正在开发一个项目,每当用户将鼠标悬停在主窗口上的按钮上时,我必须添加一个小预览窗格和一个关于框。
对于考试:我有一个窗口 - preview.xaml,我的主窗口名为MainWindow.xaml。
如何将预览窗口底部设置为显示在MainWindow上button1的顶部?
我没有运气就试过这样的事情:
public preview()
{
InitializeComponent();
this.WindowStartupLocation = WindowStartupLocation.Manual;
Top = mainWindow.button1.Margin.Top;
}
我希望我的谣言有任何意义......
非常感谢任何帮助!
答案 0 :(得分:3)
您需要将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();
}
答案 1 :(得分:0)
你必须反过来这样做。在您打开预览窗口的MainWindow中,执行以下操作:
PreviewWindow preview = new PreviewWindow
{
Owner = this,
WindowStartupLocation = WindowStartupLocation.Manual,
Top = button1.Margin.Top
};
preview.Show();
如果你想重用那个窗口,你必须做一些逻辑。