首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步加载TabItem

异步加载TabItem
EN

Stack Overflow用户
提问于 2012-02-08 00:01:49
回答 1查看 1.7K关注 0票数 0

是否可以异步加载tabitems?在我的例子中,我有一个包含几个tabitem的选项卡控件。当用户单击某个选项卡项时,应用程序会冻结一小段时间,以加载该选项卡项。

现在我想改变这一点。当用户单击选项卡项时,将显示动画,在选项卡项完全加载后,将显示该选项卡项。

有谁有主意吗?

EN

回答 1

Stack Overflow用户

发布于 2012-02-08 00:27:21

这取决于加载需要很长时间的内容。

如果数据导致暂停,则异步加载数据,并在加载数据时显示占位符。数据加载完成后,您可以将其更改为您的实际内容。

这里有一个例子,

代码语言:javascript
复制
<ContentControl>
    <ContentControl.Style>
        <Style TargetType="{x:Type ContentControl}">
            <Setter Property="ContentTemplate" Value="{StaticResource TabContentTemplate}" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsLoading}" Value="True">
                    <Setter Property="ContentTemplate" Value="{StaticResource LoadingTemplate}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>

其中更改SelectedItemRelayCommand可能如下所示:

代码语言:javascript
复制
void ChangeTab(ITabViewModel newTab)
{
    // Set loading flag and set tab as Selected
    newTab.IsLoading = true;
    SelectedTab = newTab;

    // Create async task
    var asyncTask = new Task(() => newTab.LoadData());

    // This runs after task is finished running
    asyncTask.ContinueWith(p => newTab.IsLoading = false));

    // Start async task
    asyncTask.Start();
}

如果是你的UI需要一段时间来加载,那么用户可能只需要在第一次加载选项卡时处理初始加载时间,但是当通过extending the TabControl to keep it from destorying it's TabItems切换到已经加载的选项卡时,您可以停止延迟。

WPF的TabControl的默认行为是在您切换到另一个选项卡时卸载TabItem,并在返回时重新加载它。此解决方法存储已加载选项卡的ContentPresenter,并将在切换回时重新加载保存的选项卡,而不是加载新选项卡。

在大多数情况下,UI延迟是由屏幕上大量的UI元素引起的。尝试减少选项卡上的元素数量。例如,Labels包含的元素比TextBlocks多,所以除非您需要特定于标签的功能(如选择),否则请尝试使用Labels而不是TextBlocks

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9179528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档