如何在可见之前显式加载XAML?

时间:2015-02-17 11:19:22

标签: c# wpf xaml

我有一个带有多个标签的TabControl。第一个和主要的一个非常简单,几乎没有时间加载。另一方面,第二个是数百个复杂对象的表示,大约需要1-3秒。应用程序快速启动,但是一旦您单击第二个选项卡,应用程序会冻结一会儿,加载Tab Control。

这是XAML代码的快速说明:

<Window x:Class="MyProgramme.MyMainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
         <TabControl VerticalAlignment="Stretch" Grid.Column="0" Grid.Row="0">
            <TabItem Header="Simple View" >
                <!-- Main view. Loads instantly. -->
                <ContentPresenter x:Name="m_simple"/>                    
            </TabItem>
            <TabItem Header="Heavy View" > 
                <!-- Takes about 1-3 seconds to load-->
                <ContentPresenter x:Name="m_heavy"/>
            </TabItem>
         </TabControl>
    </Grid>
</Window>

显然,这种等待对用户不是很友好,我希望有一种方法可以在方便的时候显式加载第二个标签,这可以是在启动时,也可以在UI线程不太繁忙的时候加载负荷。有没有办法加载此选项卡而不会拖延用户的工作流程?

1 个答案:

答案 0 :(得分:1)

如果要在构造函数中加载选项卡的数据,那就是冻结的原因。

而是使用Window的Loaded事件,如果可能的话,尝试启动后台线程中的重负载。一旦UI被绘制就会触发Loaded,从而导致更好的用户体验,因为UI本身似乎没有冻结。

在后台加载运行时,您还应该考虑第二个选项卡的BusyIndicatorProgressBar,以向用户表明正在进行长时间运行。