如何将我的通知窗口设置为显示在MainWindow之上?

时间:2013-05-11 21:38:50

标签: c# wpf

在我的解决方案中,我有一个包含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);

2 个答案:

答案 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;
}

它并不完美,但它比以前更好用,也更好。