【问题标题】:Tabcontrol - Selection changed load/unloadTabcontrol - 选择更改加载/卸载
【发布时间】:2014-02-05 06:00:21
【问题描述】:

这是一个好奇的问题,我对如此昂贵的布局没有实际用途。

我有以下 Xaml

<Window x:Class="WpfApplication16.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStartupLocation="CenterScreen">
    <TabControl ItemsSource="{Binding Items}">
        <TabControl.ContentTemplate>
            <DataTemplate>
                <ScrollViewer>
                    <ContentPresenter Content="{Binding View}" />
                </ScrollViewer>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>
</Window>

以及后面的代码

public class Item
    {
        public FrameworkElement View { get { return m_view; } }

        public Item()
        {
            for (int i = 0; i < 3000; ++i)
            {
                m_view.Items.Add(new TextBox());
            }
        }

        ItemsControl m_view = new ItemsControl();
    }

    public partial class MainWindow : Window
    {
        public List<Item> Items { get; private set; }

        public MainWindow()
        {
            Items = new List<Item>();
            for (int i = 0; i < 10; ++i)
            {
                Items.Add(new Item());
            }

            DataContext = this;
            InitializeComponent();
        }
    }

所以在初始化窗口之前,所有的 TextBox 都已经构建好了,总共 30,000 个,但它们还没有被加载。它们仅在选择更改时加载/卸载,例如在初始选择发生时。由于文本框的数量庞大,我希望第一次更改每个项目的选项卡需要一段时间,但为什么在我选择了每个选项卡后,再次浏览它们仍然需要很长时间才能加载/卸载?

没有绑定,我不认为这是一个布局问题,因为当我调整窗口大小时,它的更新速度比更改选项卡之间的速度要快得多。我认为这也不是内存问题(必须加载和加载的东西),因为内存使用量在选择选项卡之间增长,然后在选择所有 10 个选项卡后保持不变,然后再次运行。

我也故意不使用可视化。

【问题讨论】:

    标签: wpf layout tabcontrol loaded


    【解决方案1】:

    这是 TabControl 的默认行为,没有简单的方法可以更改它。

    它会在选项卡变为非活动状态时立即卸载它以节省内存,然后在选项卡再次变为活动状态时将其加载回来。

    如果您确实遇到此问题,您有两种选择:

    1. 有一篇关于复数视觉的博客文章,但他们更改了网站,并且不再可用。他们基本上继承了 TabControl 并更改了此行为,因此它缓存了选项卡内容。我认为代码保存在这里(或它的衍生物):WPF TabControl - Preventing Unload on Tab Change?

    2. 另一种选择(我认为更好)是购买\下载已经这样做的第三方控件。我相信 DevExpress TabControl 确实会缓存其选项卡,并且在您切换选项卡时不必重新绘制它们。 http://documentation.devexpress.com/#wpf/CustomDocument7975

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多