WPF TabControl:在窗口加载时加载所有选项卡

WPF TabControl: Load all tabs at window load

提问人:Brian 提问时间:5/20/2015 最后编辑:Brian 更新时间:5/20/2015 访问量:2918

问:

我有一个 WPF 窗体,其中包含一个包含 2 个 TabItems 的 TabControl。我对一个选项卡上的控件进行了验证,这些控件强制执行另一个选项卡上的控件的相关验证。但是,当用户切换到第二个选项卡时,它不会在已验证的控件周围显示任何红色方块,因为在第一次查看该 TabItem 之前,不会呈现选项卡内容。有没有办法在加载窗口时加载所有选项卡的内容?

更新:

我想出了一种方法来做到这一点,但感觉很麻烦。我在代码隐藏中将以下代码添加到MainWindow_OnLoaded事件处理程序中:

for (var tabIndex = MainTabControl.Items.Count - 1; tabIndex >= 0; tabIndex--)
{
    MainTabControl.SelectedIndex = tabIndex;
    MainTabControl.UpdateLayout();
}

此代码只是循环访问 TabControl 中的所有选项卡,并将它们设置为活动选项卡并更新布局。这将强制初始化所有内容。这一切都发生在窗口出现之前,因此用户看不到更改。我的 TabControl 中只有 2 个选项卡,但如果有更多的选项卡,我可以看到这会有点尴尬。

WPF 验证 事件 选项卡延迟 加载

评论

0赞 pindumb 5/20/2015
若要在使用 TabControl 时正确进行验证,需要将每个选项卡的内容包装在 <AdornerDecorator 中>
0赞 Brian 5/20/2015
@pindumb - 我的选项卡内容周围包裹着<AdornerDecorator>,一旦我查看了每个选项卡,一切都可以正常工作,但问题是在验证发生之前尚未查看第二个选项卡,当我转到它时,我没有任何验证标记。
0赞 Informagic 10/9/2019
如果我曾经见过一个,这是一个骇人听闻的解决方案,但在这里,这也是我发现的唯一方法。不过,有一个建议:您可能希望将循环的内容包装到调度程序调用中,例如 .forDispatcher.BeginInvoke((Action)(() => { /* your update code */ }));

答: 暂无答案