0

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

或者

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);
4

2 回答 2

1

您需要将自定义窗口设置为打开CenterOwner,然后像这样设置窗口所有者

TestWindow window = new TestWindow();
window.Owner = Window.GetWindow(this);
window.ShowDialog();
于 2013-05-11T21:40:28.740 回答
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;
}

它并不完美,但它是可行的,而且比以前好得多。

于 2013-05-12T17:31:53.927 回答