首页 > 解决方案 > 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>

标签: c#wpf

解决方案


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
    //
}


推荐阅读