我正在使用WPF开发一个应用程序。
就我而言,用户有2台显示器。当他在辅助屏幕中打开应用程序时,它将加载数据近5秒钟。在此期间,他可能会转向个人主要屏幕,如访问Facebook或访问推特。
加载数据后,应提示对话框。困扰我的是它经常在主屏幕上显示他处理个人资料,而不是他打开应用程序的辅助屏幕。对话框窗口应该显示在应用程序的顶部。
我在想它是因为加载数据时应用程序不活动。你们有什么想法吗?
我知道MessageBox.Show()有一个"所有者"参数可以修复此问题。如何自动获得正确的所有者?我正在使用PRISM模式,因此我不容易找到窗口作为所有者。
代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Task.Delay(5000);
MessageBox.Show("Loaded!");
}
}
答案 0 :(得分:0)
是的,所有者参数应该解决这个问题。关于棱镜,有不同的方法。对我来说最简单的方法是使用引用应用程序主窗口的Application.Current.MainWindow。
MessageBox.Show(Application.Current.MainWindow, "bla bla");
您也可以尝试通过IoC容器解析Shell窗口,并将其作为所有者。
答案 1 :(得分:0)
您可以尝试使用Extended WPF Toolkit Community Edition(NuGet Package Extended.Wpf.Toolkit)中的MessageBox:
<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();
}
}
MessageBox在Window ...
中