在我的解决方案中,我有一个包含MainWindow的项目(a.k.a。,我的应用程序的主窗口)。在同一解决方案的另一个项目中,我有一个聊天客户端用户控件,当用户收到新消息时会显示一个通知窗口。
我想让我的通知窗口弹出MainWindow,无论MainWindow出现在哪里。只要用户有1个监视器,下面的代码就可以工作,如果有多个监视器,则MainWindow最大化。但是,如果MainWindow最小化,通知将显示在工作区域的右上角,而不是MainWindow。
我已尝试下面的每个代码集(在ChatClient.xaml.cs中执行)但没有成功。
private const double topOffset = 0;
private const double leftOffset = 300;
popNotification.Top = Application.Current.MainWindow.Top + topOffset;
popNotification.Left = Application.Current.MainWindow.Width - leftOffset;
OR
popNotification.Top = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Top + topOffset;
popNotification.Left = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right - leftOffset;
如何让我的通知窗口始终显示在MainWindow之上?我应该在MainWindow.xaml.cs中执行吗?谢谢你的帮助!
修改
下面的代码也会导致我的应用程序(通过MainWindow)崩溃。我能说的最好,这会将窗口所有者设置为用户控件,而不是MainWindow。我需要做什么呢?
popNotification.Owner = Window.GetWindow(this);
还试过这个:
popNotification.Owner = Window.GetWindow(Application.Current.MainWindow);
答案 0 :(得分:1)
您需要将自定义窗口设置为打开CenterOwner
,然后像这样设置窗口所有者
TestWindow window = new TestWindow();
window.Owner = Window.GetWindow(this);
window.ShowDialog();
答案 1 :(得分:0)
我认为它做了以下事情:
所以代码如下:
public partial class ChatControl : User Control
{
PopNotifications popNotification = new PopNotifications();
--and other code
}
public ChatControl()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(ChatControl _Loaded);
}
private void ChatControl _Loaded(object sender, RoutedEventArgs e)
{
Window parentWindow = Window.GetWindow(this);
popNotification.Owner = parentWindow;
popNotification.Top = popNotification .Owner.Top;
popNotification.Left = popNotification .Owner.Left;
popNotification.WindowStartupLocation = WindowStartupLocation.Manual;
}
它并不完美,但它比以前更好用,也更好。