我有一个带有多个标签的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线程不太繁忙的时候加载负荷。有没有办法加载此选项卡而不会拖延用户的工作流程?
答案 0 :(得分:1)
如果要在构造函数中加载选项卡的数据,那就是冻结的原因。
而是使用Window的Loaded
事件,如果可能的话,尝试启动后台线程中的重负载。一旦UI被绘制就会触发Loaded
,从而导致更好的用户体验,因为UI本身似乎没有冻结。
在后台加载运行时,您还应该考虑第二个选项卡的BusyIndicator
或ProgressBar
,以向用户表明正在进行长时间运行。