c# - Window.show 未在 wpf 中加载内容
问题描述
我正在尝试使用 system.windows.window.show() 方法打开一个窗口作为加载屏幕。该程序应该继续运行代码,然后在完成后关闭窗口。问题是窗口不会显示我要显示的文本块。但是当我做 ShowDialog() 它会
LoadingWindow lw = new LoadingWindow();
lw.Show();
//
//do stuff
//
lw.Close();
<Window x:Class="RevitAPITest3.LoadingWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RevitAPITest3"
mc:Ignorable="d"
Title="Loading..." Height="450" Width="800" >
<Grid>
<TextBlock x:Name="text" FontSize="20" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Height="43" Width="291">testing</TextBlock>
</Grid>
</Window>
解决方案
lw.Show()
和之间有根本的区别lw.ShowDialog()
。
lw.Show()
将立即返回下一行代码,而无需等待窗口关闭。lw.ShowDialog()
将等待用户手动关闭窗口,然后返回 true/false 值。
在您的示例代码中,您的问题是因为lw.Show()
立即返回,所以它会“做一些事情”,然后lw.Close()
在您看到窗口之前关闭您的窗口。
你想要做的是这样的事情。注意:您不必显式调用lw.Close()
,因为窗口将在完成该lw.ShowDialog()
行后立即自动关闭。
var result = lw.ShowDialog();
if (result.HasValue)
{
//
//do Stuff
//
}