【发布时间】:2014-03-23 00:48:50
【问题描述】:
我们使用 Tabcontrol 来显示一些内容相当昂贵的项目,而我们遇到的问题是,当您遍历选项卡(一个一个地选择它们)时,应用程序的响应速度会变慢而且更慢。
据我了解,这种行为是出乎意料的,随着所选标签的更改,先前选择的标签内容首先被卸载,因此您一次只需为一个标签内容支付费用。
我已经设法用下面的代码模拟了这种行为。重现:
- 运行应用程序
- 启动选定的选项卡上下文菜单(选项卡标题上下文菜单),它将是响应式的
- 从左到右,逐个选择标签页
-
当你到达 tab ~10 时,它的上下文菜单的响应现在非常迟钝,当你点击一个复选框时,它的动画需要几秒钟才能运行完
<Window x:Class="WpfApplication4.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" WindowStartupLocation="CenterScreen"> <Window.Resources> <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}"> <Setter Property="ContextMenu"> <Setter.Value> <ContextMenu> <CheckBox Content="CheckBox" /> <CheckBox Content="CheckBox" /> <CheckBox Content="CheckBox" /> <CheckBox Content="CheckBox" /> <CheckBox Content="CheckBox" /> </ContextMenu> </Setter.Value> </Setter> </Style> </Window.Resources> <TabControl Name="tabControl" />public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); for (int i = 0; i < 25; i++) { CreateTab(); } } void CreateTab() { var itemsControl = new ItemsControl(); for (int i = 0; i < 1000; ++i) { itemsControl.Items.Add(new TextBox()); } tabControl.Items.Add(new TabItem() { Header = string.Format("Tab{0}", tabControl.Items.Count), Content = itemsControl }); } }
【问题讨论】:
标签: wpf tabcontrol lag