Wpf 当主窗口处于非活动状态时,如何在主窗口上显示对话框?
我正在用WPF开发一个应用程序 在我的例子中,用户有两个监视器。当他在辅助屏幕上打开应用程序时,它将加载数据将近5秒钟。在此期间,他可能会转向主屏幕查看个人信息,如访问Facebook或twitter 加载数据后,应提示一个对话框。让我烦恼的是,它经常出现在他处理个人事务的主屏幕上,而不是他打开应用程序的次屏幕上。对话框窗口应该显示在应用程序的顶部 我认为这是因为加载数据时应用程序未处于活动状态。你们知道吗 我知道MessageBox.Show()有一个“owner”参数可以解决这个问题。如何自动获得正确的所有者?我使用的是棱镜模式,所以我不容易找到作为所有者的窗口 代码:Wpf 当主窗口处于非活动状态时,如何在主窗口上显示对话框?,wpf,windows,Wpf,Windows,我正在用WPF开发一个应用程序 在我的例子中,用户有两个监视器。当他在辅助屏幕上打开应用程序时,它将加载数据将近5秒钟。在此期间,他可能会转向主屏幕查看个人信息,如访问Facebook或twitter 加载数据后,应提示一个对话框。让我烦恼的是,它经常出现在他处理个人事务的主屏幕上,而不是他打开应用程序的次屏幕上。对话框窗口应该显示在应用程序的顶部 我认为这是因为加载数据时应用程序未处于活动状态。你们知道吗 我知道MessageBox.Show()有一个“owner”参数可以解决这个问题。如何自
是的,owner参数应该解决这个问题。关于棱镜,有不同的方法。对我来说,最简单的方法是使用引用应用程序主窗口的
MessageBox.Show(Application.Current.MainWindow, "bla bla");
您还可以尝试通过IoC容器解析Shell窗口,并将其作为所有者。您可以尝试使用Extended WPF Toolkit Community Edition(NuGet Package Extended.WPF.Toolkit):
MessageBox位于窗口内…如何显示对话框。张贴代码。顺便说一句,你可以显示启动屏幕或一些进度指示器,而不是messagebox。这可能会回答你的问题:这里有一个想法。发布一些代码,说明如何打开对话框。这些代码是如何发布的。谢谢你提醒我,谢谢。对于这种特殊情况,它可以工作。但是我正在寻找一种显示messagebox的通用方法。在Prism中,主窗口通常是外壳。如果存在除主窗口之外的弹出窗口,并且我希望对话框显示在该窗口上,我不能使用主窗口作为参数。
MessageBox.Show(Application.Current.MainWindow, "bla bla");
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="MainWindow" Height="350" Width="525">
<Grid>
<xctk:WindowContainer>
<xctk:ChildWindow Height="100" Width="250" Left="10" Top="10" Name="chWindow">
<TextBlock Text="Hello World ..." />
</xctk:ChildWindow>
<xctk:MessageBox Height="100" Width="250" Left="10" Top="100" Name="msgBox">
</xctk:MessageBox>
</xctk:WindowContainer>
<Button Name="btnTst" Click="btnTst_Click" Content="Test" Width="65" Height="30" HorizontalAlignment="Left" VerticalAlignment="Bottom" />
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void btnTst_Click(object sender, RoutedEventArgs e)
{
await Task.Delay(5000);
//this.chWindow.Show();
this.msgBox.ShowMessageBox();
}
}