Pie*_*ler 3 wpf dialog window modal-dialog showdialog
当我的WPF MVVM应用程序试图在主窗口启动之前显示两个连续的错误对话框窗口时,我接受了这个(付出了一些努力):在第一个窗口打开之后,应用程序进入循环并且第二个错误对话框从未出现过.
我解决了这个问题,但我希望有人可以告诉我为什么会这样.
看来,如果没有非模态打开窗口,如果关闭了一个对话框窗口,则所有新对话窗口都会立即关闭,而不显示.
它很容易重现,所以这里有一些高度自负的代码来说明问题.这段代码是完整的,所以使用这个,你应该能够重现它.
为对话框窗口创建一个Window控件,后面没有代码,只有以下XAML:
<Window x:Class="ForumExampleShowDialogIssue.OKDialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OKDialogWindow" Height="300" Width="300">
<StackPanel>
<TextBlock Text="This is a Window with a single button. The button is set to Cancel, so it closes the window."
TextWrapping="Wrap"
Margin="5"/>
<Button Content="OK" IsCancel="True" IsDefault="True"
Margin="5"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
接下来,使用标准WPF App类,在XAML中没有任何新内容,但后面的代码中包含以下内容:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
OKDialogWindow alwaysOpen = new OKDialogWindow();
alwaysOpen.Show();
while (true)
{
OKDialogWindow dialogWindow = new OKDialogWindow();
Console.WriteLine("Before show");
dialogWindow.ShowDialog();
Console.WriteLine("After show");
}
}
Run Code Online (Sandbox Code Playgroud)
删除MainWindow.XAML(如果存在),并从App.XAML标头中删除对它的引用.
跑.(该计划,不像森林).
这按预期工作.该alwaysOpen窗口保持打开状态,而一个接一个dialogWindow实例出现在对话框模式,关闭时OK点击,则显示下一个.
但是,当您更改OnStartup为以下内容时,这会中断:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
while (true)
{
OKDialogWindow dialogWindow = new OKDialogWindow();
Console.WriteLine("Before show");
dialogWindow.ShowDialog();
Console.WriteLine("After show");
}
}
Run Code Online (Sandbox Code Playgroud)
当没有不断打开的窗口时,第一个对话窗口是唯一有效的窗口.之后,无数的"Before show"和"After show"消息被打印到控制台,但没有出现新的对话窗口 - 它们会在显示后立即自动关闭.
当然这不是预期的行为?你得到相同的结果吗?知道为什么会这样吗?
这是预期的行为.
检查一下:http: //www.ageektrapped.com/blog/the-wpf-application-class-overview-and-gotcha/
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |