在我的WPF项目中,我有一个TabControl
,每个TabItem
都是UserControl
。
<TabControl Name="tc" IsSynchronizedWithCurrentItem="True" >
<TabControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBox Text="{Binding Header}" BorderThickness="0" Cursor="Arrow" Focusable="False" />
</Grid>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate DataType="{x:Type uc:MyUserControl}">
<ContentPresenter Content="{Binding Content}"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
在我的代码背后,我创建了一个ViewModelClass
。 TabControl的ItemsSource
是ObservableCollection<MyViewModel>
。
public class MyViewModel
{
public string Header { get; set; }
public MyUserControl Content { get; set; }
}
TabItem
标头绑定到MyViewModel.Header
,内容为MyViewModel.MyUserControl
。我的UserControl
实际上是DataGrid
,大约有500行和30列。以下是DataGrid
的代码。
<DataGrid Name="DG" ReadOnly="true"
CanUserResizeColumns="False"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingPanel.VirtualizationMode="Recycling"
VirtualizingPanel.IsVirtualizing="True"
CanUserSortColumns="False"
ScrollViewer.CanContentScroll="True"/>
我知道已经有一些帖子讨论WPF的性能,但是大多数都是几年前我已经尝试过其中的一些,例如EnableRowVirtualization,EnableColumnVirtualization,VirtualizingPanel。
其中一个是将ScrollViewer.CanContentScroll
设置为False
,当我这样做时,网格似乎更快但将标签切换到其他标签。这需要更长的时间。我认为它正在重新绘制DataGrid
,所以我放弃了这个。
无论如何,结果并不是很好,特别是当窗口最大化时,滚动的性能实在是不可接受。
我不认为我是唯一一个面临这类问题的人。所以我想再次提出这个问题。任何人都可以给我一些改善DataGrid
表现的建议吗?